我正在尝试更新 Java FX 中的进度条。我的第一个问题是窗口说“没有响应”而不是实际更新。它只是冻结,然后在任务完成后,进度条变满。所以我发现我必须使用多线程并像这样实现它。
overallList.clear();
progressbar.setprogress(0);
for(Object obj : list) {
class ThreadProgress implements Runnable { // inner class
public void run() {
thisList = scrape(obj);
overallList.add(thisList);
progressbar.setProgress(progressbar.getProgress() + (double)1/size);
}
}
Thread current = new Thread(new ThreadProgress());
current.start();
}
textAreaConsole.setText("Total number of things:" + overallList.size());
Run Code Online (Sandbox Code Playgroud)
但现在的问题是最后一行打印“事物总数:0”,因为在机器运行最后一行之前,线程实际上并没有完成执行。然后我找到了多种方法来解决这个问题,特别是使用 join() 或 ExecutorService。我像这样实现了 join() 。
overallList.clear();
progressbar.setprogress(0);
List<Thread> threads = new ArrayList<Thread>();
for(Object obj : list) {
class ThreadProgress implements Runnable { // inner class
public void run() {
thisList = scrape(obj);
overallList.add(thisList); …Run Code Online (Sandbox Code Playgroud)