2017-06-13 180 views
0

我在IntelliJ中安装了JavaFX应用程序。这个应用程序可以从命令行运行,并从jar中作为gui运行。除了jar中的两种模式之外,我还想发布一个本地bundle(对于我来说是mac,所以dmg)。我想通过在main()中创建一个if语句来执行此操作,该语句需要指令来启动gui。这是我的班级。如何从JavaFX中的相同代码生成jar和本地包(dmg,exe等)

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”。有没有人知道如何在创建本地捆绑件工件时传递参数?

如果有更好的方法做到这一点?这只是两个要求。

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

也有点offtopic,但你访问索引0之前,应检查参数的个数长度:'如果(args.length> = 1 && ARGS [0]。等于....' –

回答

1

你可以创建2个主要类别:

  • 控制台应用程序 - >隐藏UI
  • UI应用程序 - >显示UI

然后你就可以创建2个假象:控制台神器,用户界面神器。然后使用你的主要类。

或者你可以在JavaFX应用程序神器在Java FX选项卡中定义的“应用程序参数”:JavaFX Application Parameters

这是一个简单的属性与“键=值”或只是一个“关键”文件。每行一个条目。 然后,你可以在你的启动方法来获取此参数:

@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

应用程序参数是什么?参考一个'params.properties'列表或什么? – EGHDK

+0

查看我的更新后的帖子。 – Phil

+0

非常感谢菲尔 – EGHDK

相关问题