为什么不能 运行 编译 JavaFX 11 class?
Why cannot run compiled JavaFX 11 class?
按照 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 命令处理 classes:
java [options] mainclass [args...]
其中 mainclass
指定要启动的 class 的名称,而不是文件名或位置。
如果您安装了 Java 11(并且设置了 JAVA_HOME
),下载 JavaFX 11 SDK,然后开始 guide :
将HelloFXclass下载到任意位置,即/Users/<user>/Downloads
.
打开终端并 cd 到该位置:
cd /Users/<user>/Downloads
设置JavaFX路径:
export PATH_TO_FX=/path/to/javafx-sdk-11/lib
编译class:
javac --module-path $PATH_TO_FX --add-modules=javafx.controls HelloFX.java
检查是否在同一文件夹级别创建了 HelloFX.class
。
运行 class:
java --module-path $PATH_TO_FX --add-modules=javafx.controls HelloFX
应该运行就好了。
现在,如果您尝试从不同的位置 运行 上面的命令将不起作用,因为 HelloFX
class 在 class路径。
所以如果你想从不同的位置运行这个class你需要指定这个class路径:
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
按照 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 命令处理 classes:
java [options] mainclass [args...]
其中
mainclass
指定要启动的 class 的名称,而不是文件名或位置。
如果您安装了 Java 11(并且设置了 JAVA_HOME
),下载 JavaFX 11 SDK,然后开始 guide :
将HelloFXclass下载到任意位置,即
/Users/<user>/Downloads
.打开终端并 cd 到该位置:
cd /Users/<user>/Downloads
设置JavaFX路径:
export PATH_TO_FX=/path/to/javafx-sdk-11/lib
编译class:
javac --module-path $PATH_TO_FX --add-modules=javafx.controls HelloFX.java
检查是否在同一文件夹级别创建了
HelloFX.class
。运行 class:
java --module-path $PATH_TO_FX --add-modules=javafx.controls HelloFX
应该运行就好了。
现在,如果您尝试从不同的位置 运行 上面的命令将不起作用,因为 HelloFX
class 在 class路径。
所以如果你想从不同的位置运行这个class你需要指定这个class路径:
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