我正在尝试在Java FX中更新进度条。我的第一个问题是窗口显示“未响应”,而不是实际更新。它只是冻结,然后在任务完成后,进度条变成了满的。所以我发现我必须使用多线程并像这样实现它。
最初的回答:
我正在尝试在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());
但是现在的问题是最后一行打印出"Total number of things: 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);
progressbar.setProgress(progressbar.getProgress() + (double)1/size);
}
}
Thread current = new Thread(new ThreadProgress());
current.start();
threads.add(current);
}
for(Thread thread : threads) thread.join(); // with a try-catch loop
textAreaConsole.setText("Total number of things:" + overallList.size());
但这又让我回到最初的问题,窗口再次显示“未响应”。使用ExecutorService时也出现了同样的问题。现在我不知道该怎么办了。