簡體   English   中英

在沒有GUI的情況下從命令行運行JavaFX應用

[英]Run JavaFX app from the command line without GUI

我有一個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上的hiddenExit屬性為true
  • 調用stop()方法

因此,如果我不能使用main方法,該如何創建“替代”流程? 我曾考慮過創建一個普通的Java應用程序作為包裝器,但是對於這樣一個簡單的任務而言,這似乎有些過頭了。 有沒有更優雅的方式做到這一點?

只需在調用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()方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM