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)

しかし、私には1つのエラーがあります

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

エラーが示すように、おそらくshowFXアプリケーションスレッドでメソッドを呼び出す必要があります。

これは、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 に答える