如何将参数传递给 JavaFX 应用程序?

2022-09-03 01:06:31

我正在运行我的JavaFX应用程序,如下所示:

public class MainEntry {
    public static void main(String[] args) {
        Controller controller = new Controller();
        Application.launch(MainStage.class);
    }
}

MainStage类扩展 。 在一个特殊的FX线程中启动我的JavaFX窗口,但是在我的main方法中,我甚至没有我的类的实例。AppicationApplication.launchMainStage

如何将非字符串参数(在我的情况下是控制器)传递给实例?这是一个有缺陷的设计吗?MainStage


答案 1

从 JavaFX 9 开始,您可以使用公共 API “手动”触发 JavaFX 平台的启动。唯一的缺点是该方法的调用方式与在应用程序中通过以下方式启动的方式不同:stopApplication.launch

public class MainEntry {
    public static void main(String[] args) {
        Controller controller = new Controller();

        final MainStage mainStage = new MainStage(controller);
        mainStage.init();

        Platform.startup(() -> {
            // create primary stage
            Stage stage = new Stage();

            mainStage.start(stage);
        });
    }
}

传递给的在 JavaFX 应用程序线程上调用。RunnablePlatform.startup


答案 2

这是我在其他地方找到的一个很好的例子

@Override
public void init () throws Exception
{
  super.init ();

  Parameters parameters = getParameters ();

  Map<String, String> namedParameters = parameters.getNamed ();
  List<String> rawArguments = parameters.getRaw ();
  List<String> unnamedParameters = parameters.getUnnamed ();

  System.out.println ("\nnamedParameters -");
  for (Map.Entry<String, String> entry : namedParameters.entrySet ())
    System.out.println (entry.getKey () + " : " + entry.getValue ());

  System.out.println ("\nrawArguments -");
  for (String raw : rawArguments)
    System.out.println (raw);

  System.out.println ("\nunnamedParameters -");
  for (String unnamed : unnamedParameters)
    System.out.println (unnamed);
}