3

我想用 javafx 在 scala 中创建一个弹出窗口

final val popup = new Popup  
val text: Text = new Text(s)
popup.setAutoFix(false)
popup.setHideOnEscape(true)
popup.getContent().addAll(text)
popup.setX(250)
popup.setY(175)
popup.show(stage)

但我有一个错误

org.view.View@72d873: caught java.lang.IllegalStateException: Not on FX application thread; currentThread = ForkJoinPool-1-worker-1
java.lang.IllegalStateException: Not on FX application thread; currentThread = ForkJoinPool-1-worker-1

有人有想法吗?

感谢

4

1 回答 1

3

如错误所示,您可能应该show在 FX 应用程序线程上调用该方法。

这是因为修改 UI 的代码必须在特定的 UI 线程上执行(Swing 和其他 GUI 框架也是如此),以防止并发更新并保证 UI 组件的一致性。

通常这些修改已经在正确的线程上进行,该线程为 UI 事件侦听器执行回调代码,但是如果您需要从另一个线程访问 UI,您必须在 FX 应用程序线程上调用

javafx.application.Platform.runLater(Runnable r)

如在

runLater (new Runnable() {
    def run = popup.show(stage)
})
于 2012-11-21T17:00:32.627 回答