使用JavaFX 2.0编译代码(使用命令行)

Jhu*_*aya 24 java compilation javafx-2

我想知道如何使用JavaFX从Windows shell编译代码.

我有这个代码fxservidor.java:

public class Fxservidor extends Application {

    /**
     * @param args the command line arguments
     */
    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) {
                Synthetizer os = new Synthetizer("Ximena");                
            }
        });

        StackPane root = new StackPane();
        root.getChildren().add(btn);
        primaryStage.setScene(new Scene(root, 300, 250));
        primaryStage.show();
    }
}
Run Code Online (Sandbox Code Playgroud)

jew*_*sea 26

Oracle Java 8

如果您正在使用Oracle Java 8或更高版本,正如cayhorstmann在其答案中所指出的,JavaFX类现在位于Oracle Java实现的默认运行时类路径中.您可以在程序上运行javac,java并且可以按预期找到JavaFX类,就像JRE中的任何其他类一样.

javac Fxservidor.java
java Fxservidor
Run Code Online (Sandbox Code Playgroud)

OpenJDK 8

如果您正在使用OpenJDK 8,您将(当前)需要从OpenJFX存储库构建JavaFX源,并将结果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 
Run Code Online (Sandbox Code Playgroud)

将JDK_HOME和JAVAFX_SDK_HOME占位符分别替换为已安装的JDK和JavaFX SDK的路径.

此处提供用于JavaFX 2.x命令行开发和部署打包的示例Windows批处理脚本.

这是我在我的机器上运行以编译应用程序的命令(您需要调整环境的类路径):

javac -classpath "\Program Files\Oracle\JavaFX 2.1 Runtime\lib\jfxrt.jar" Fxservidor.java
Run Code Online (Sandbox Code Playgroud)

这是我用来运行编译类的命令:

java -classpath "\Program Files\Oracle\JavaFX 2.1 Runtime\lib\jfxrt.jar;." Fxservidor
Run Code Online (Sandbox Code Playgroud)

注意;.用于将当前目录附加到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();
    }

}
Run Code Online (Sandbox Code Playgroud)

部署建议

如果要将应用程序部署到用户,即使使用Java 8,也建议您使用相关的打包工具打包应用程序(例如JavaFX ant任务,javafxpackager,javafx-maven-pluginjavafx-gradle-plugin).

如果您只想对小程序进行一些快速命令行开发和测试,则不需要那些额外的打包工具,您只需使用此答案中的简单步骤即可.


Eul*_*eek 8

在macbook,osx等中,你可以编译:

javac -cp "/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/jfxrt.jar" Fxservidor.java
Run Code Online (Sandbox Code Playgroud)

并运行:

java -cp ".:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/jfxrt.jar" Fxservidor
Run Code Online (Sandbox Code Playgroud)

请注意.:而不是 .;


小智 5

javac -classpath "\Program Files\Oracle\JavaFX 2.1 Runtime\lib\jfxrt.jar" Fxservidor.java
Run Code Online (Sandbox Code Playgroud)

我在Ubuntu Linux上运行了上面的命令,JavaFX2.0 beta并编译了它的类文件,但是当我尝试用这个命令运行它时它没有用.

java -classpath "\Program Files\Oracle\JavaFX 2.1 Runtime\lib\jfxrt.jar" Fxservidor
Run Code Online (Sandbox Code Playgroud)

这是我收到的错误消息:

错误:无法找到或加载主类Fxservidor

  • 我更新了我的答案:在Linux下,您需要将`:.`附加到运行时类路径,以允许java运行时查找已编译到当前目录的类. (2认同)