【问题标题】:Add argument start method JavaFX添加参数启动方法JavaFX
【发布时间】:2016-07-21 09:11:55
【问题描述】:

如何在应用程序 javafx 的 start 方法中传递参数? 事实上,我在另一个类中调用我的 javafx 应用程序:

mainController.getMainApp().launch(MainApp.class);

在我的启动方法下面:

@Override
public void start(Stage primaryStage) {
    this.primaryStage = primaryStage;
    this.primaryStage.setTitle("CLS");
    this.primaryStage.initStyle(StageStyle.UNDECORATED);
    // here the page fxml to load

问题是我不知道我将在我的启动方法中加载的页面 fxml 是什么。我的另一个班谁知道。 所以我想在我的方法中传递参数开始知道我将加载什么 fxml 页面。

请帮忙。

谢谢。

【问题讨论】:

  • 我认为您对 JavaFX 应用程序的生命周期有些误解。 Application 类仅代表整个应用程序,并调用start() 方法来启动它:将start() 视为实质上main() 的替代品。因此,在调用start() 时应该可用的唯一数据是从命令行传递给应用程序的命令行参数。除了传递给start() 方法的阶段之外,此时内存中应该没有其他可访问的对象。

标签: java javafx arguments


【解决方案1】:

Applicationlaunch 方法旨在接受可变参数:

public static void launch(Class<? extends Application> appClass, String... args)

因此您可以传递如下参数:

launch(MainApp.class, "--FXMLFile=Sample.fxml", "UnnamedArgument");

然后在initstart 方法中,您可以使用getParameters() 方法获取这些参数:

Parameters parameters = getParameters();
List<String> unnamed = parameters.getUnnamed();
Map<String, String> named = parameters.getNamed();
List<String> raw = parameters.getRaw();

您可以使用命名或未命名参数(在示例中第一个命名为第二个未命名。getNamed() 方法返回 Map 中的命名参数,getUnnamed() 方法返回未命名参数List,而getRaw() 将命名和未命名参数作为原始list 返回。

getParameters() 的 javadoc 中的注释:

注意:不应从应用程序调用此方法 构造函数,因为它将返回 null。 It 可以在 init() 中调用 方法或之后的任何时间。

【讨论】:

  • 好的,谢谢,但是如果我写了一个启动方法,我无法访问在方法启动中初始化的primaryStage?
  • 对不起,我不明白这个问题。
  • @Benj 你没有写launch(...) 方法;它已经为你写好了。您只需从 main(...) 调用它,以防 JRE 不知道如何启动 JavaFX 应用程序本身。您似乎试图在错误的位置启动您的应用程序。
猜你喜欢
  • 2015-05-29
  • 2013-04-26
  • 1970-01-01
  • 2018-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-05
相关资源
最近更新 更多