猿问

在没有 GUI 的情况下从命令行运行 JavaFX 应用程序

我有一个 JavaFX,用户可以在其中选择要处理的文件。现在我想自动化它,以便您可以从命令行运行应用程序并将这些文件作为参数传递。我试着这样做:

java -jar CTester.jar -cl file.txt

public static void main(String[] args){
    if (Arrays.asList(args).contains("-cl"))
    {
        foo();
    }    else
    {
        launch(args);
    }
}

main 已执行且参数正确,但这仍会创建 GUI。

文档

JavaFX 应用程序的入口点是 Application 类。每当应用程序启动时,JavaFX 运行时按顺序执行以下操作:

  • 构造指定 Application 类的实例

  • 调用 init() 方法

  • 调用 start(javafx.stage.Stage) 方法

  • 等待应用程序完成,这在发生以下任一情况时发生:

    • 应用程序调用 Platform.exit()

    • 最后一个窗口已关闭且 Platform 上的 implicitExit 属性为真

  • 调用 stop() 方法

因此,如果我不能使用该main方法,我该如何创建这种“替代”流程?我考虑过创建一个普通的 Java 应用程序作为包装器,但对于这样一个简单的任务来说,这似乎有点过分了。有没有更优雅的方式来做到这一点?


繁华开满天机
浏览 73回答 1
1回答

慕妹3242003

在调用您的方法后简单地退出应用程序foo():Platform.exit();这是一个用于演示的快速示例应用程序:import javafx.application.Application;import javafx.application.Platform;import javafx.geometry.Insets;import javafx.geometry.Pos;import javafx.scene.Scene;import javafx.scene.control.Label;import javafx.scene.layout.VBox;import javafx.stage.Stage;public class CLSample extends Application {    public static void main(String[] args) {        if (Arrays.asList(args).contains("-cl")) {            commandLine();            Platform.exit();        } else {            launch(args);        }    }    public static void commandLine() {        System.out.println("Running only command line version...");    }    @Override    public void start(Stage primaryStage) {        // Simple Interface        VBox root = new VBox(10);        root.setAlignment(Pos.CENTER);        root.setPadding(new Insets(10));        root.getChildren().add(new Label("GUI Loaded!"));        // Show the stage        primaryStage.setScene(new Scene(root));        primaryStage.setTitle("CLSample Sample");        primaryStage.show();    }}如果您通过-cl,则只会commandLine()调用该方法。
随时随地看视频慕课网APP

相关分类

Java
我要回答