1

按照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。)

4

1 回答 1

4

openjfx-dev邮件列表中已经回答了这个问题:

“java”命令需要一个完全限定的类名,而不是文件路径作为它的参数

完成:

  • javac命令处理文件名,这意味着您可以从任何位置编译 java 文件:

    javac [ options ] [ sourcefiles ]
    
  • 但是java命令处理类:

    java [options] mainclass [args...] 
    

    wheremainclass指定要启动的类的名称,而不是文件名或位置。

如果您安装了 Java 11(并JAVA_HOME设置好了),下载了 JavaFX 11 SDK,并按照入门指南进行操作:

  • 将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
于 2018-10-31T09:14:51.460 回答