如何从JavaFX

时间:2017-06-13 13:27:53

标签: java intellij-idea javafx javafx-2 javafx-8

我在IntelliJ中设置了JavaFX应用程序。这个应用程序可以从命令行运行,并作为jar的gui。除了jar中的两种模式之外,我还想发布一个本机包(在我的情况下是mac,所以dmg)。我想通过在main()中创建一个if语句来执行此操作,该语句接受指令以启动gui。这是我的班级。

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{
        Parent root = FXMLLoader.load(getClass().getResource("dummy.fxml"));
        primaryStage.setTitle("TODO");
        primaryStage.setScene(new Scene(root, 400, 400));
        primaryStage.show();
    }


    public static void main(String[] args) {
        if (args[0].equals("user_interface")) {
            //launch gui version
            launch(args);
        } else {
            //Run command line version of the app
            //TODO
        }
    }
}

我在intellij项目中创建了两个构建工件。一个用于jar,一个用于javafx应用程序以生成dmg。

罐子完美无缺。它在cli中运行并启动javafx应用程序,但我不知道如何在创建本机包时传递参数,以便我可以传入“user_interface”。有没有人知道在创建本机包工件时如何传递args?

如果有更好的方法吗?这只是两个要求。

  1. 应该有两个工件。一个罐子和一个dmg。
  2. jar可以在cli或gui模式下运行。

1 个答案:

答案 0 :(得分:1)

您可以创建2个主要类:

  • 控制台应用 - >隐藏UI
  • UI App - >显示用户界面

然后你可以创建2个工件:控制台工件,ui工件。然后使用你的主要课程。

或者您可以在JavaFx应用程序工件的Java FX选项卡中定义“应用程序参数”:JavaFX Application Parameters

这是一个简单的属性文件,带有“key = value”或只有“key”。每行一个条目。 然后你可以在start方法中获取这些参数:

    @Override
    public void start(Stage primaryStage) throws Exception {
        Parameters parameters = getParameters();

        List<String> unnamed = parameters.getUnnamed();
        for (String s : unnamed) {
            System.out.println(s + " (unnamed)");
            Alert al = new Alert(Alert.AlertType.INFORMATION);
            al.setContentText(s + " (unnamed)");
            al.show();
        }

        List<String> raw = parameters.getRaw();
        for (String s : raw) {
            System.out.println(s + " (raw)");
            Alert al = new Alert(Alert.AlertType.INFORMATION);
            al.setContentText(s + " (raw)");
            al.show();
        }
}