【发布时间】:2020-05-25 09:12:16
【问题描述】:
我在过滤树视图(长进程)时遇到问题,我的应用程序冻结了。我尝试在单独的线程(Thread)中执行此操作,但随后出现错误“Not on FX application thread; currentThread = Thread-5”
void InitBtnFind() {
//Event Button Search
btnFind.setOnAction(event -> {
newFind();
if (Config.isRoot()) {
String finalSFilterExt = filterExt.getText();
String finalSearchW = searchWord.getText();
Platform.runLater(() -> {
try {
// imitation of work
Thread.sleep(5000);
fileView.setRoot(treeView.filterChanged(finalSFilterExt, finalSearchW));
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
System.out.println("lol");
});
}
});
}
您可以提供一个示例代码来解决我的问题。 附:不要降低我的声誉,我对这件事很感兴趣
附:我尝试用线程来做到这一点
//Event Button Search
btnFind.setOnAction(event -> {
newFind();
if (Config.isRoot()) {
String finalSFilterExt = filterExt.getText();
String finalSearchW = searchWord.getText();
if (findThread != null && findThread.isAlive())
findThread.interrupt();
findThread = new Thread(() -> {
try {
fileView.setRoot(treeView.filterChanged(finalSFilterExt, finalSearchW));
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("lol");
});
findThread.setName("findThread");
findThread.setDaemon(true);
findThread.start();
}
System.out.println("kek");
});
【问题讨论】:
-
minimal reproducible example 请使用 Java 命名约定!
标签: java multithreading javafx