Запустите приложение JavaFX из командной строки без графического интерфейса - PullRequest
1 голос
/ 09 июля 2019

У меня есть JavaFX, в котором пользователь может выбирать файлы для обработки. Теперь я хочу автоматизировать его, чтобы вы могли запустить приложение из командной строки и передать эти файлы в качестве параметра. Я пытался сделать это:

java -jar CTester.jar -cl file.txt

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

Основное выполняется, и аргумент является правильным, но это все еще создает GUI.

Из документов :

Точкой входа для приложений JavaFX является класс Application. Среда выполнения JavaFX выполняет следующее по порядку всякий раз, когда приложение запущен:

  • Создает экземпляр указанного класса приложения
  • Вызывает метод init ()
  • Вызывает метод запуска (javafx.stage.Stage)
  • Ожидание завершения приложения, которое происходит, когда один из следующих происходят:
    • приложение вызывает Platform.exit ()
    • последнее окно было закрыто и атрибут implicitExit на платформе равен true
  • Вызывает метод stop ()

Итак, если я не могу использовать метод main, как я могу создать этот «альтернативный» поток? Я думал о создании обычного Java-приложения в качестве оболочки, но это кажется немного излишним для такой простой задачи. Есть ли более элегантный способ сделать это?

1 Ответ

2 голосов
/ 09 июля 2019

Просто выйдите из приложения после вызова метода 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().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...