0

我在 ScalaFX 中编写了一个 GUI,在隔离测试时效果很好。需要提及的事情:

  • “真正的”应用程序本身已经有一个 main 方法,只有那个应该用于启动应用程序,而不是我在扩展 JFXApp 时得到的那个。所以对 JFXApp 的 main 方法的调用是从外部手动完成的
  • 应该可以将数据结构传递给JFXApp,所以我添加了一个setter

整个启动过程是这样的:

def main(args: Array[String]) {
    ...
    ...
    JFXGui.setData(data)
    JFXGui.main(Array())
}

问题:

  • 只要不调用JFX对象的main方法,我就无法绘制数据对象的内容,所以setData实际上只是一个简单的setter方法。想法是在被调用JFXGui后尽快提取数据。JFXGui.main但是:我怎么能在里面意识到这一点JFXGui?有没有类似“onready”的方法?
  • 在上面的代码中,我尝试将setter的调用放在main方法的调用之后,这样setter就可以触发绘图了。我没有想到的是它JFXGui.main会永远阻塞,因此对 setter 的调用是无法访问的代码。

我该如何解决这个问题?任何帮助表示赞赏,谢谢。

编辑:

JFXGui是我的 ScalaFX UI 的名称:

object JFXGui extends JFXApp {

  private var data: Data = _

  def setData(data: Data) {
    this.data = data;
 }

  // tons of ScalaFX related things which visualize the data object
  // ...
}
4

1 回答 1

1

解决方案1(重用JFXApp)

Gui对象不再应该是一个对象,而是一个带有构造函数参数的类。

class Gui(data: Data) extends JFXApp {
    //your existing code without the field data and the method setData()
}

在启动类中:

new Gui(data).main(Array())

解决方案 2(自定义初始化)

您不一定必须使用JFXApp才能运行您的应用程序。我建议你看看源代码JFXApp.main()和类AppHelper。它们包含约 10 行代码组合,因此您只需复制它们的源代码并根据您的需要对其进行定制。

于 2015-01-09T19:38:43.010 回答