在非JavaFX应用程序线程上创建新的工具提示

时间:2012-12-13 16:27:08

标签: multithreading tooltip javafx

有没有办法在线程中创建javafx.scene.control.Tooltip而不是“JavaFX Application Thread”?

由于性能的原因,我在一个线程中准备了一些可视元素并将它们保存在内存中。当我需要它们时,我使用Application Thread来显示它们。但是新的Tooltip()似乎只需要Application Thread。

1 个答案:

答案 0 :(得分:2)

  

有没有办法在线程中创建javafx.scene.control.Tooltip而不是“JavaFX Application Thread”?

对于JavaFX 2.2 - 否。

请参阅此JavaFX问题跟踪器tiecket:Tooltip of Tab (and other controls) cannot be set of FXApplicationThread

故障单中有建议的解决方法,可以在Tooltip电话中创建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:

  

将来某个未指定的时间在JavaFX应用程序线程上运行指定的Runnable。可以从任何线程调用的此方法将Runnable发布到事件队列,然后立即返回给调用者。 Runnables按照发布顺序执行。传递给runLater方法的runnable将在任何Runnable传递给后续的runLater调用之前执行。