当前位置: 首页 > 知识库问答 >
问题:

如何从命令行启动JavaFX源代码文件?

空枫涟
2023-03-14

从JDK11开始,java命令可以启动java源代码文件,也就是说,不需要首先编译java源代码。下面是我的java源代码:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;

public class HelloJavaFxWorld extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        Label label = new Label("Hello JavaFX World");
        Pane root = new Pane(label);
        Scene scene = new Scene(root);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

我将此代码保存为文件hellojavafxworld.java
我打开一个命令提示符窗口并输入以下命令。

java HelloJavaFxWorld.java

这是(部分)输出。

HelloJavaFxWorld.java:1: error: package javafx.application does not exist
import javafx.application.Application;

如何运行JavaFX源代码文件?

共有1个答案

芮承运
2023-03-14

由于JDK11是模块化的,因此需要添加JavaFX模块。请尝试以下操作。

java -p "path\to\javafx.graphics.jar;path\to\javafx.base.jar;path\to\javafx.controls.jar" --add-modules javafx.graphics,javafx.controls HelloJavaFxWorld.java

用JAR文件的实际路径替换path\to。例如,在我的Windows10机器上,我安装了JDK16.0.1,因此我使用JavaFX16,并将[JavaFX]JAR文件放在这个文件夹中:

C:\Program Files\Java\javafx-sdk-16\lib

所以启动JavaFX源代码文件的实际命令是:

java -p "C:\Program Files\Java\javafx-sdk-16\lib\javafx.graphics.jar;C:\Program Files\Java\javafx-sdk-16\lib\javafx.base.jar;C:\Program Files\Java\javafx-sdk-16\lib\javafx.controls.jar" --add-modules javafx.graphics,javafx.controls HelloJavaFxWorld.java

上述命令可能导致以下异常。

Exception in thread "main" java.lang.RuntimeException: java.lang.ClassNotFoundException: HelloJavaFxWorld
        at javafx.graphics/javafx.application.Application.launch(Application.java:310)
        at HelloJavaFxWorld.main(HelloJavaFxWorld.java:19)
Caused by: java.lang.ClassNotFoundException: HelloJavaFxWorld
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:636)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:182)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519)
        at java.base/java.lang.Class.forName0(Native Method)
        at java.base/java.lang.Class.forName(Class.java:466)
        at javafx.graphics/javafx.application.Application.launch(Application.java:298)
        at HelloJavaFxWorld.main(HelloJavaFxWorld.java:19)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:567)
        at jdk.compiler/com.sun.tools.javac.launcher.Main.execute(Main.java:415)
        at jdk.compiler/com.sun.tools.javac.launcher.Main.run(Main.java:192)
        at jdk.compiler/com.sun.tools.javac.launcher.Main.main(Main.java:132)

这是因为,当启动java源代码文件时,会编译源代码,并将编译后的类存储在内存中,即不创建.class文件。类JavaFX.application.application中的方法launch(string...)调用类java.lang.class中的方法forName以加载JavaFX应用程序类。由于没有HelloJavaFxWorld.Class文件,方法forName抛出ClassNotFoundException

为了解决这个问题,只需更改java源代码来调用另一个启动方法。换句话说,将方法main更改为以下内容。

public static void main(String[] args) {
    launch(HelloJavaFxWorld.class, args);
}
 类似资料:
  • 问题内容: 我想直接在命令行执行单个php语句,而不必使用单独的php文件。 这怎么可能 ? 问题答案: 如果您要在命令行中使用PHP,建议您安装 phpsh,这是一个不错的PHP shell。这很有趣。 无论如何,php命令提供了 两个开关来从命令行执行代码 : 您可以这样使用php的 -r开关 : 上面的PHP命令应该 输出 并 返回, 如您所见: 另一个有趣的开关是 php -a : 与 p

  • 我遵循以下指示https://code.visualstudio.com/docs/setup/mac但我没有成功。这就是我进去时发生的事情 我得到了以下信息: 我还查找了以下问题:如何在OSX上从命令行打开Visual Studio代码?,这没用。 我在VSCode中只有一个终端选项,zsh。

  • 我正在尝试从命令行更新Xcode。最初我试着跑步: 这导致了以下消息: 所以问题仍然存在,有没有办法从命令行更新Xcode?

  • 我一直在尝试在Windows中创建一个批处理文件,以直接启动Minecraft 1.7.10。然而,自从新的启动器发布以来,我尝试的方法已经改变了。有人知道我如何使用用户名和会话令牌从命令行直接启动它吗?我合法拥有Minecraft,所以我应该能够使用我的会话令牌和用户名。

  • 问题内容: 我想阅读使用linux命令编写的实际源代码。我已经获得了使用它们的一些经验,现在我认为是时候与我的机器进行更深层次的互动了。 我在http://directory.fsf.org/wiki/GNU中找到了一些命令。不幸的是,我找不到基本的命令,例如“ ls”,在我看来这很容易上手。 我如何准确地读取像’ls’这样的简单shell命令的源代码?我在Ubuntu 12.04上运行 问题答案

  • 问题内容: 我有以下代码行可运行批处理文件, 但是我希望它在后台运行,而不是向用户显示命令行。我该如何更改才能做到这一点? 问题在于命令窗口打开并中断程序GUI。我只希望命令窗口在执行批处理文件时不可见。 问题答案: 完全删除“开始”将完成您想要的操作(因为这就是创建窗口的原因): 我已经对此进行了测试,并且可以正常工作,当然,如果您想与命令提示符进行通信,则必须具有输入和输出流,也不要忘记您的错