java.lang.IllegalStateException: Not on FX application thread
问题描述
最近写JavaFX程序遇到了下面的错误:Exception in thread "pool-2-thread-1" java.lang.IllegalStateException: Not on FX application thread; currentThread = pool-2-thread-1
	at com.sun.javafx.tk.Toolkit.checkFxUserThread(Toolkit.java:291)
	at com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUserThread(QuantumToolkit.java:424)
	at javafx.stage.Stage.<init>(Stage.java:254)
	at javafx.stage.Stage.<init>(Stage.java:240)
	at javafx.scene.control.HeavyweightDialog$1.<init>(HeavyweightDialog.java:52)
	at javafx.scene.control.HeavyweightDialog.<init>(HeavyweightDialog.java:52)
	at javafx.scene.control.Dialog.<init>(Dialog.java:267)
	at javafx.scene.control.Alert.<init>(Alert.java:245)
	at javafx.scene.control.Alert.<init>(Alert.java:220)
	at net.ifok.bilibili.Root.alert(Root.java:48)
	at net.ifok.bilibili.controller.AppController.lambda$download$3(AppController.java:129)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:834)
大概意思就是在非FX 应用线程中创建使用了FX的组件。
问题来源
我查找了下原因,是因为我的一个任务处理在自创的一个线程池的线程执行,然后在执行任务的时候我创建了一个Alert提示框,导致的这个错误。解决办法
我在解决之前查找了资料,发现有朋友说通过Platform.runLater(()->{
});我这里只是一个Alert,我的办法就是不把整个任务放在Platform,只把需要操作界面组件的时候添加Platform,例如:
我的线程池
执行任务开始--->
//弹出消息
Platform.runLater(()->{
   Root.alert(Alert.AlertType.INFORMATION,"任务完成","请前往["+pathToSave.getText()+"]查看");
});
执行结束----->
https://www.leftso.com/article/843.html
 
                