Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从JavaFX中的相同代码生成jar和本机包(dmg、exe等)_Java_Intellij Idea_Javafx_Javafx 2_Javafx 8 - Fatal编程技术网

如何从JavaFX中的相同代码生成jar和本机包(dmg、exe等)

如何从JavaFX中的相同代码生成jar和本机包(dmg、exe等),java,intellij-idea,javafx,javafx-2,javafx-8,Java,Intellij Idea,Javafx,Javafx 2,Javafx 8,我在IntelliJ中安装了JavaFX应用程序。这个应用程序可以从命令行运行,也可以作为jar的gui运行。除了jar中的两种模式之外,我还想为mac发布一个本机包,即dmg。我想通过在main中创建一个if语句来实现这一点,该语句接受启动gui或不启动gui的指令。这是我的课 public class Main extends Application { @Override public void start(Stage primaryStage) throws Excep

我在IntelliJ中安装了JavaFX应用程序。这个应用程序可以从命令行运行,也可以作为jar的gui运行。除了jar中的两种模式之外,我还想为mac发布一个本机包,即dmg。我想通过在main中创建一个if语句来实现这一点,该语句接受启动gui或不启动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应用程序,但我不知道如何在创建本机捆绑包时传递参数,以便传入用户界面。有人知道在创建本机bundle工件时如何传递args吗

如果有更好的方法?这仅仅是两个要求

应该有两个工件。一个罐子和一个dmg。 jar可以在cli或gui模式下运行。
您可以创建两个主要类:

控制台应用程序->隐藏用户界面 UI应用->显示UI 然后您可以创建2个工件:控制台工件、ui工件。然后使用主类

或者,您可以在JavaFx应用程序工件的JavaFx选项卡中定义应用程序参数:

这是一个简单的属性文件,key=value或只有一个键。每行一个条目。 然后,您可以在开始方法中获取以下参数:

    @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();
        }
}

也有点离题,但在访问索引0之前应该检查args的长度:如果args.length>=1&&args[0].equals….应用程序参数是什么?对params.properties列表或其他东西的引用?太好了。谢谢你,菲尔