JavaのFXアプリケーションスレッドではありません
このチュートリアルでは、Java の FX アプリケーション スレッドではありません
エラーについて説明します。
JavaのFXアプリケーションスレッドではありません
FX スレッドではなく、FX スレッドから呼び出す必要があるスレッドからメソッドを呼び出そうとすると、FX アプリケーション スレッドではありません
というエラーが発生します。 これは、以前のバージョンの JavaFX では問題ではありませんでした。
これは、JavaFX 8 の新しい実装で発生します。このエラーは、JavaFX アプリケーションの別のスレッドでユーザー インターフェイスを変更すると発生します。
Not on FX application thread
エラーをスローする例を次に示します。
Thread DemoThreadShow = new Thread(new Runnable() {
@Override
public void run() {
try {
newthread.setStyle("visibility: true");
Thread.sleep(10000);
Thread.interrupted();
} catch (Exception e) {
thread.setText("" + Integer.valueOf(thread.getText()) + 5);
newthread.setStyle("visibility: false");
}
}
});
DemoThreadShow.start();
上記のコードはスレッドを作成し、そのスレッドにいくつかのメソッドを適用します。 これらのメソッドは、JavaFX アプリケーションからのものです。
setText
メソッドを適用すると、エラー Exception in thread "Thread-5" java.lang.IllegalStateException: Not on FX application thread; がスローされます。 currentThread = スレッド-5
.
この問題を解決するには、コードに次の変更を加えることができます。
-
FX アプリケーションおよびスレッドで作業中に UI を変更するには、次の方法を使用します。
Platform.runLater(() -> { // GUI STUFF }); or : Platform.runLater(new Runnable() { @Override public void run() { // GUI STUFF } });
-
スレッド
の代わりにサービス
とタスク
を使用することもできます。サービス
にはスレッド
よりも多くの機能があります。タスク内で UI を変更しても、
FX アプリケーション スレッドではありません
というエラーがスローされることはありません。 この目的でService
とTask
を使用するコード例を次に示します。Service New_Service = new Service() { @Override protected Task createTask() { return new Task() { @Override protected Object call() throws Exception { Platform.runLater(() -> { // GUI stuff here }); return null; } }; } }; New_Service.start();
上記のコードは、スレッドよりも便利な方法です。
Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.
LinkedIn Facebook