[英]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.