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

8dtrkrch  于 2023-04-10  发布在  Java
关注(0)|答案(5)|浏览(165)

我想知道如何使用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();
    }
}
vaqhlq81

vaqhlq811#

  • Oracle Java 8*

如果您使用的是Oracle Java 8或更新版本,正如cayhorstmann在他的回答中指出的那样,JavaFX类现在位于Oracle Java实现的默认运行时类路径上。您可以在程序上运行javacjava,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的路径。
here提供了一个用于JavaFX 2.x命令行开发和部署包的示例Windows批处理脚本。
下面是我在我的机器上运行的一个命令来编译你的应用程序(你需要调整你的环境的类路径):

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 tasksjavafxpackagerjavafx-maven-pluginjavafx-gradle-plugin)打包应用程序。
如果你只是想做一些快速的命令行开发和测试,小程序,这些额外的打包工具是不需要的,你可以只使用这个答案中的简单步骤。

xfyts7mz

xfyts7mz2#

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

javac -cp "/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/jfxrt.jar" Fxservidor.java

然后运行:

java -cp ".:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/jfxrt.jar" Fxservidor

请注意.:而不是.;

mcdcgff0

mcdcgff03#

javac -classpath "\Program Files\Oracle\JavaFX 2.1 Runtime\lib\jfxrt.jar" Fxservidor.java

我用JavaFX2.0 beta在Ubuntu Linux上运行了上面的命令,它编译了它的类文件,但是当我试图用这个命令运行它时,它不起作用。

java -classpath "\Program Files\Oracle\JavaFX 2.1 Runtime\lib\jfxrt.jar" Fxservidor

这是我得到的错误消息:
错误:无法找到或加载主类Fxservidor

xqkwcwgp

xqkwcwgp4#

顺便说一句,在JDK 8中,JavaFX jar似乎可以使用,而不必将其放在类路径中。

path/to/jdk1.8.0-b96/bin/javac HelloWorld.java
path/to/jdk1.8.0-b96/bin/java HelloWorld

就像你想象的那样。

5t7ly7z5

5t7ly7z55#

原始但简单的解决方案是将jfxrt.jar文件的副本放在java安装下的**.../jre 7/lib/ext**目录中。
然后,您应该始终在类路径中提供它。
不推荐用于分发jfx应用程序,当然,但方便开发人员玩左右...
(For解释,见:http://docs.oracle.com/javase/tutorial/ext/basics/install.html

相关问题