试图验证:在 javaFX 应用程序初始化时是否有 *no* 标准方法来传递非字符串参数?

Trying to verify: Is there *no* standard way to pass non-string arguments at the initialization of a javaFX app?

我有一个很长的 运行 数据处理应用程序。根据它看到的数据,我可能想要启动一个 JavaFX 应用程序 window(或者它可能永远不会启动一个)。我如何传递我的缓存数据?

例如在 Swing 中,我有一个可能看起来像的构造函数:

class MyFrame extends JFrame{
  public MyFrame(BlobOfInMemoryCachedData manyMegabytesOfData){
    this.data = manyMegabytesOfData; 
    // create JPanel, etc. using that data
    ...
  }
}

基于这个答案:,我可以想象非标准外观的 java 解决方法。在将此类解决方法的使用融入应用程序设计之前,我想验证一下:真的没有更简洁的方法来直接传递对象句柄吗?

很快,因为我没有时间用示例代码写出正确的答案:

  1. 对于您的长 运行 Java 应用程序,主要调用 JavaFX 应用程序启动方法一次(并且在您的应用程序的整个生命周期内只调用一次)。
  2. 调用 Platform.setImplicitExit(false)。
  3. 在您的 JavaFX 应用程序的启动方法中不显示 window。
  4. 在您的 JavaFX 应用程序 show(data) 上提供一个静态访问器来传递您的 blob 数据。
  5. show(data) 方法显示 JavaFX window 用于在 UI.
  6. 中中继数据处理信息
  7. 必要时在您的应用程序上调用隐藏 JavaFX 应用程序的静态 hide() 方法 window。
  8. 继续处理,执行步骤 5 和 6(根据需要显示和隐藏 window)。
  9. 当一切都完成后调用 Platform.exit()。

关键是 JavaFX 应用程序只启动一次,您可以根据需要在其上调用静态访问器来显示 window。 set implicit exit false stuff 防止 JavaFX 运行时的默认行为在应用程序的最后一个 window 被隐藏时关闭(因此它只是在后台等待信号显示某些东西再次)。

您可以通过让您的数据处理应用程序扩展 JavaFX 应用程序 class 来稍微简化一些事情,但您可能希望将它们分开以便于测试或其他设计原因。

您的另一个选择是使用 JFXPanel,但这会增加不必要的 Swing 依赖性,因此我建议您不要这样做。