按照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
。)
答案 0 :(得分:2)
openjfx-dev邮件列表中已经回答了这个问题:
“ java”命令要求使用完全限定的类名,而不是文件路径 其论点
完成:
javac命令处理文件名,这意味着您可以从任何位置编译Java文件:
javac [ options ] [ sourcefiles ]
但是java命令处理类:
java [options] mainclass [args...]
其中mainclass
指定要启动的类的名称,而不是文件名或位置。
假设您已安装Java 11(并已设置JAVA_HOME
),并已下载JavaFX 11 SDK,并且紧接着入门guide:
将HelloFX类下载到任何位置,即/Users/<user>/Downloads
。
打开一个终端并cd到该位置:
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