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)
Platform.runLater(()->{
});
通过把任务丢在这个ruan里面来解决,原因是Platform的run是FX线程来运行,所以没问题。那么问题来了,如果是线程中任务不长且不用查看任务进度反馈则可以使用,如果任务长+需要界面展示任务进度,则该办法不可行,会让程序假死。我的线程池
执行任务开始--->
//弹出消息
Platform.runLater(()->{
Root.alert(Alert.AlertType.INFORMATION,"任务完成","请前往["+pathToSave.getText()+"]查看");
});
执行结束----->
https://blog.xqlee.com/article/843.html