2

有没有办法在不是“JavaFX 应用程序线程”的线程中创建 javafx.scene.control.Tooltip?

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

4

1 回答 1

2

有没有办法在不是“JavaFX 应用程序线程”的线程中创建 javafx.scene.control.Tooltip?

对于 JavaFX 2.2 - 否。

请参阅此 JavaFX 问题跟踪器 ticket:无法设置 FXApplicationThread 的 Tab (和其他控件)的工具提示

票证中有一个建议的解决方法,用于在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 将在传递给后续调用 runLater 的任何 Runnable 之前执行。

于 2012-12-13T18:00:19.230 回答