アプリケーションでのスレッドの処理に問題があります。JFrame を作成し、新しいスレッドを開始します。最後の 1 つは、外部アプリケーションを実行し、GUI を更新します。それで
Main クラスを 2 番目のスレッドが終了するまで待機させるだけでなく、同時に 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()
私も(で)試しましMain
たが、IllegalStateMonitorExceptionが発生しました。
ヒントはありますか?