有没有办法在不是“JavaFX 应用程序线程”的线程中创建 javafx.scene.control.Tooltip?
由于性能原因,我在一个线程中准备了一些视觉元素并将它们保存在内存中。当我需要它们时,我会使用 Application Thread 来展示它们。但是 new Tooltip() 似乎只需要应用程序线程。
有没有办法在不是“JavaFX 应用程序线程”的线程中创建 javafx.scene.control.Tooltip?
由于性能原因,我在一个线程中准备了一些视觉元素并将它们保存在内存中。当我需要它们时,我会使用 Application Thread 来展示它们。但是 new Tooltip() 似乎只需要应用程序线程。
有没有办法在不是“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 之前执行。