好的,这是我的问题:
我正在尝试为我的一个项目构建一个自定义下载帮助程序。我希望我的实现允许多次下载(同时运行),所以我认为我应该为每次下载启动一个线程。
但是,问题是我还想更新程序的 GUI。为此,我想使用 invokeLater() 方法,因为 Swing 不是线程安全的。
现在:如果我在每个线程中使用 invokeLater() 方法来更新进度条,线程如何知道我的 GUI?请让我知道您对这种方法的看法以及您将如何解决此问题。
请同时考虑这一点:
public class frame extends JFrame {
public frame() {
//the constructor sets up the JProgressBar and creates a thread object
}
public void getFiles() {
// Here I would start the thread.
thread.start();
}
}
这是另一个设置线程的类:
public class theThread extends Thread {
// Here I would create the thread with its constructor
public void run() {
// Here comes some code for the file download process
//
// While the thread is running the method below gets called.
updateGUI();
}
public void updateGUI() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// Here I need to place the code to update the GUI
// However, this method has no idea of what the GUI looks like
// since the GUI was setup in the class 'frame'.
}
});
}
}