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