2

「JavaFXアプリケーションスレッド」ではないスレッドでjavafx.scene.control.Tooltipを作成する方法はありますか?

パフォーマンスのために、1 つのスレッドでいくつかのビジュアル要素を準備し、それらをメモリに保持します。そして、それらが必要なときは、それらを表示するためにアプリケーション スレッドを使用します。しかし、 new Tooltip() はアプリケーション スレッドのみを必要とするようです。

4

1 に答える 1

2

「JavaFXアプリケーションスレッド」ではないスレッドでjavafx.scene.control.Tooltipを作成する方法はありますか?

JavaFX 2.2 の場合 - いいえ。

この JavaFX イシュー トラッカー チケットを参照してください: Tooltip of Tab (およびその他のコントロール) を FXApplicationThread に設定することはできません

チケットには、Platform.runLater呼び出しでツールチップを作成するための推奨される回避策があります。

package fxthread_25127_wrongthread;

import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.control.Tooltip;
import javafx.stage.Stage;
/**
 *
 * @author mickf
 */
public class Main extends Application {
    Tooltip tooltip;

    public static void main(String[] args) {
        Application.launch(args);
    }
    @Override public void init() throws Exception {
        Platform.runLater(new Runnable() {
            @Override public void run() {
                tooltip = new Tooltip("Top tip : use runLater()");
            }
        });
        /*
         * this will cause an ISE
         */
        //tooltip = new Tooltip("flip");
    }
    @Override public void start(Stage s) {
        System.exit(0);
    }
} 

Platform.runLater が javadoc からどのように機能するかの説明:

指定された Runnable を JavaFX アプリケーション スレッドで将来の不特定の時点で実行します。任意のスレッドから呼び出すことができるこのメソッドは、Runnable をイベント キューにポストし、すぐに呼び出し元に戻ります。Runnables は、ポストされた順序で実行されます。runLater メソッドに渡された runnable は、runLater への後続の呼び出しに渡された Runnable の前に実行されます。

于 2012-12-13T18:00:19.230 に答える