我在处理应用程序中的线程时遇到问题。它创建 JFrame 并启动一个新线程。最后一个将执行外部应用程序并更新 GUI。然后
我有问题让 Main 类等待第二个线程完成,但也要同时更新 GUI。
这是我的示例(缩短):
class Main {
public int status;
public Main() {
// Creating GUI etc.
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JDialog id = new JDialog();
id.button.addMouseListener(new MouseListener()); // Calls generate() method
}
});
}
public void generate() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// Make changes to GUI
}
});
GeneratorThread genTest = new GeneratorThread(this, 1, 1, 1);
genTest.start();
//while (status == 0);
System.out.println("Next step.");
}
}
和线程类:
public class GeneratorThread extends Thread {
protected Main main;
protected int setSize, minValue, maxValue;
public GeneratorThread(Main main, int setSize, int minValue, int maxValue) {
this.main = main;
this.setSize = setSize;
this.minValue = minValue;
this.maxValue = maxValue;
}
public void run() {
// Execute program etc.
// Change GUI from main in the same time
// About 3 seconds
main.status = 1;
}
}
我正在进行中,我想检查它到目前为止是如何工作的。虽然工作得很好,但它以某种方式锁定了 Swing,并且只有在GeneratorThread
完成时才能看到任何更改。我想实时更新 GUI。
我试过join()
了,效果是一样的。我也试过wait()
(on Main
),但后来我得到了 IllegalStateMonitorException。
有什么提示吗?