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

时间:2015-02-11 00:45:31

标签: javafx javafx-8

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

e.g。在Swing中,我有一个可能看起来像构造函数:

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

基于这个答案:https://stackoverflow.com/a/24611918/155631,我可以想象非标准的java解决方法。在我将这些变通方法的使用加入到应用程序设计之前,我想验证:是否真的没有更直接的方法来直接传递对象句柄?

1 个答案:

答案 0 :(得分:1)

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

  1. 在长期运行的Java应用程序的主要部分中,调用JavaFX应用程序启动方法一次(在应用程序的整个生命周期内只调用一次)。
  2. 调用Platform.setImplicitExit(false)。
  3. 在JavaFX应用程序的start方法中,不要显示窗口。
  4. 在JavaFX应用程序show(data)上提供一个静态访问器,用于传递blob数据。
  5. show(data)方法显示一个JavaFX窗口,用于在UI中转发数据处理信息。
  6. 必要时,在应用程序上调用静态hide()方法,该方法隐藏JavaFX应用程序窗口。
  7. 继续处理,执行步骤5和6(根据需要显示和隐藏窗口)。
  8. 当一切都完成后,请调用Platform.exit()。
  9. 关键是JavaFX应用程序只启动一次,并根据需要在其上调用静态访问器来显示窗口。设置隐式退出虚假内容可以防止JavaFX运行时的默认行为在应用程序的最后一个窗口被隐藏时关闭(因此它只是在后台突然等待信号再次显示)。

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

    你的另一个选择是使用JFXPanel,但这增加了一个不必要的Swing依赖,所以我建议不要这样做。