从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源代码文件?
由于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,所以我应该能够使用我的会话令牌和用户名。
问题内容: 我有以下代码行可运行批处理文件, 但是我希望它在后台运行,而不是向用户显示命令行。我该如何更改才能做到这一点? 问题在于命令窗口打开并中断程序GUI。我只希望命令窗口在执行批处理文件时不可见。 问题答案: 完全删除“开始”将完成您想要的操作(因为这就是创建窗口的原因): 我已经对此进行了测试,并且可以正常工作,当然,如果您想与命令提示符进行通信,则必须具有输入和输出流,也不要忘记您的错
问题内容: 我想阅读使用linux命令编写的实际源代码。我已经获得了使用它们的一些经验,现在我认为是时候与我的机器进行更深层次的互动了。 我在http://directory.fsf.org/wiki/GNU中找到了一些命令。不幸的是,我找不到基本的命令,例如“ ls”,在我看来这很容易上手。 我如何准确地读取像’ls’这样的简单shell命令的源代码?我在Ubuntu 12.04上运行 问题答案