JavaFX安装

Zet*_*red 3 java installation sdk javafx

我是 Java 新手,目前正在阅读文本并学习。我已经在我的目录中安装了 JDK /opt(在 Kubuntu 上工作)。我还在/opt. 由于我使用了终端,每当我想编译或运行涉及 JavaFX 模块的内容时,我都会使用

javac --module-path $PATH_TO_FX --add-modules ALL-MODULE-PATH className.java

但是,当我尝试同样的事情时,jshell它不会起作用。那是,

jshell --module-path $PATH_TO_FX --add-modules ALL-MODULE-PATH

我想知道的是,有没有什么方法可以安装 JavaFX SDK,以便它与 Java SDK 目录合并,这样每当我想编译/运行需要任何模块的程序时,我就不必使用这些标志来自JavaFX?

如果没有,谁能告诉我为什么jshell上面的命令不能按我的预期工作?

Jam*_*s_D 5

对于你的问题的这一部分:

我想知道的是,有没有什么方法可以安装 JavaFX SDK,以便它与 Java SDK 目录合并,这样每当我想编译/运行需要任何模块的程序时,我就不必使用这些标志来自JavaFX?

您可以使用jlink,它会生成自定义运行时映像。为了将服务包含在生成的运行时映像中,请使用该--bind-services选项。由于我不太明白的原因,要包含jshell在其中,您必须显式添加jdk.jshell模块(简单地使用--add-modules ALL-MODULE-PATH是行不通的)。所以你需要类似的东西:

jlink --module-path $PATH_TO_FX --add-modules javafx.controls,javafx.fxml,jdk.jshell --bind-services --output JavaWithFX
Run Code Online (Sandbox Code Playgroud)

创建包含 JavaFX 模块的 JDK。您可能需要包含其他 JavaFX 模块(例如javafx.web,如果您正在使用WebViewjavafx.media如果您正在使用MediaPlayer等),或者javafx.fxml如果您不使用 FXML,则省略。

现在你可以使用该 JDK 来编译和运行:

export JAVA_HOME=JavaWithFX
javac ClassName.java
java ClassName
Run Code Online (Sandbox Code Playgroud)

(或者可能export PATH=JavaWithFX/bin:$PATH代替export JAVA_HOME,具体取决于 Java 在您的系统上的工作方式)。

跑步

JavaWithFX/bin/jshell
Run Code Online (Sandbox Code Playgroud)

将为您提供一个包含 JavaFX 模块的 jshell:

% JavaWithFX/bin/jshell
|  Welcome to JShell -- Version 20
|  For an introduction type: /help intro

jshell> import javafx.beans.property.SimpleIntegerProperty

jshell> var x = new SimpleIntegerProperty(0)
x ==> IntegerProperty [value: 0]

jshell> x.addListener((obs, oldValue, newValue) -> System.out.printf("x changed from %d to %d%n", oldValue, newValue))

jshell> x.set(42)
x changed from 0 to 42

jshell> 
Run Code Online (Sandbox Code Playgroud)