我想使用javafx
在scala中创建一个pop-infinal 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
有人有个主意吗?
感谢
答案 0 :(得分:3)
您可能应该在FX Application线程上调用show
方法,如错误所示。
这是因为修改UI的代码必须在特定的UI线程上执行(对于Swing和其他GUI框架也是如此),以防止并发更新并保证UI组件的一致性。
通常这些修改已在正确的线程上进行,该线程执行UI事件侦听器的回调代码,但如果您需要从另一个线程访问UI,则必须在FX应用程序线程上安排它。致电
javafx.application.Platform.runLater(Runnable r)
,如
runLater (new Runnable() {
def run = popup.show(stage)
})