Oracle Java 8
如果您使用的是 Oracle Java 8 或更新版本,正如 cayhorstmann 在他的回答中指出的那样,JavaFX 类现在位于 Oracle Java 实现的默认运行时类路径中。您可以在您的程序上运行javac 和java,JavaFX 类将按预期找到,就像 JRE 中的任何其他类一样。
javac Fxservidor.java
java Fxservidor
OpenJDK 8
如果您使用的是 OpenJDK 8,您将(当前)需要来自 OpenJFX 存储库的build the JavaFX sources,并将生成的 jfxrt.jar 放在您的类路径中,类似于此答案中定义的 Java 7 描述。
JavaFX 2.x / Java 7
您使用Java Compiler 编译JavaFX 程序:
"%JDK_HOME%\bin\javac" -classpath "%JAVAFX_SDK_HOME%\rt\lib\jfxrt.jar" fxservidor.java
将 JDK_HOME 和 JAVAFX_SDK_HOME 占位符分别替换为安装的 JDK 和 JavaFX SDK 的路径。
提供了用于 JavaFX 2.x 命令行开发和部署打包的示例 windows 批处理脚本here。
这是我在我的机器上运行的用于编译您的应用程序的命令(您需要为您的环境调整类路径):
javac -classpath "\Program Files\Oracle\JavaFX 2.1 Runtime\lib\jfxrt.jar" Fxservidor.java
这是我用来运行编译类的命令:
java -classpath "\Program Files\Oracle\JavaFX 2.1 Runtime\lib\jfxrt.jar;." Fxservidor
注意 ;. 标记用于将当前目录附加到 Windows 中 java 执行命令的类路径(如果使用 Unix 变体,则使用 :. 而不是 ;.)。
示例应用
这是您的程序的修改版本,可以编译:
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class Fxservidor extends Application {
public static void main(String[] args) {
launch(args);
}
@Override public void start(Stage primaryStage) {
primaryStage.setTitle("Hello World!");
Button btn = new Button();
btn.setText("Say 'Hello World'");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Hello World");
}
});
StackPane root = new StackPane();
root.getChildren().add(btn);
primaryStage.setScene(new Scene(root, 300, 250));
primaryStage.show();
}
}
部署建议
如果您正在向用户部署应用程序,即使使用 Java 8,建议您使用相关的打包工具(例如 JavaFX ant tasks、javafxpackager、javafx-maven-plugin 或 javafx-gradle-plugin)打包应用程序。
如果你只是想对小程序做一些快速的命令行开发和测试,那些额外的打包工具是不需要的,你可以使用这个答案中的简单步骤。