Следуя инструкциям в https://openjfx.io/openjfx-docs/#install-javafx, я скомпилировал образец HelloFX.java с помощью:
javac --module-path $PATH_TO_FX --add-modules=javafx.controls /Users/me/Documents/java/HelloFX.java
Но теперь, если я попытаюсь запустить это ...
java --module-path $PATH_TO_FX --add-modules=javafx.controls /Users/me/Documents/java/HelloFX
... я получаю ошибку:
Error: Could not find or load main class .Users.me.Documents.java.HelloFX
Caused by: java.lang.ClassNotFoundException: /Users/me/Documents/java/HelloFX
Тем не менее, файл, о котором было сообщено, что не найден, находится там:
ls -l /Users/me/Documents/java/HelloFX.class
-rwxr--r-- 1 me staff 1336 Oct 30 16:01 /Users/murray/Documents/java/HelloFX.class
(Я уже изменил разрешения на добавление u+x
на тот случай, если проблема была в этом, но, видимо, проблема не в этом.
Что случилось?
(Да, $PATH_TO_FX
указывает на javafx-sdk-11/lib
.)
На этот вопрос уже был дан ответ в списке рассылки openjfx-dev:
The "java" command expects a fully-qualified class name, not a file path as its argument
Для завершения:
Команда javac имеет дело с именами файлов, что означает, что вы можете скомпилировать файл java из любого места:
javac [ options ] [ sourcefiles ]
Однако команда Джава имеет дело с классами:
java [options] mainclass [args...]
где mainclass
указывает имя запускаемого класса, а не имя файла или расположение.
При условии, что у вас установлена Java 11 (и на ней установлен JAVA_HOME
), загружен JavaFX 11 SDK и сразу после начала работы руководство:
Загрузите класс HelloFX в любое место, например /Users/<user>/Downloads
.
Откройте терминал и перейдите в это место:
cd /Users/<user>/Downloads
Задайте путь JavaFX:
export PATH_TO_FX=/path/to/javafx-sdk-11/lib
Скомпилируйте класс:
javac --module-path $PATH_TO_FX --add-modules=javafx.controls HelloFX.java
Убедитесь, что HelloFX.class
создан на том же уровне папки.
Запускаем класс:
java --module-path $PATH_TO_FX --add-modules=javafx.controls HelloFX
Он должен работать нормально.
Теперь, если вы попытаетесь запустить указанную выше команду из другого места, это не сработает, потому что класс HelloFX
недоступен в пути к классам.
Поэтому, если вы хотите запустить этот класс из другого места, вам нужно указать этот путь к классам:
javac --module-path $PATH_TO_FX --add-modules=javafx.controls \
/Users/<user>/Downloads/HelloFX.java
java --module-path $PATH_TO_FX --add-modules=javafx.controls \
--class-path /Users/<user>/Downloads HelloFX