0

SwingUtilities.invokeLater を使用して、モーダル ダイアログを SwingWorker スレッドで表示されるように設定しています。ダイアログが表示されるまで SwingWorker スレッドを待機させたい。これを行う最善の方法は何ですか?SwingWorker オブジェクトの doInBackground() メソッドに次のコードを追加しました。

synchronized (myDialog) {
    while (!myDialog.isVisible()) {
            myDialog.wait();
    }
}

MyDialog クラスのオーバーライドされた setVisible() メソッドでは、次のようになります。

public void setVisible(boolean enabled) {
    synchronized (this) {
        notifyAll();
    }

    super.setVisible(enabled);
}

ただし、タイミングの問題があるため、これは機能していないようです。

これを行うための良い方法を見つけようとしていますが、かなりイライラしています!

4

2 に答える 2

1

doInBackground()ワーカーのメソッドからダイアログを操作しないでください。代わりpublish()に適切な結果を表示し、からダイアログを表示しprocess()ます。からの呼び出しPropertyChangeListenerに応答して起動されるを登録することもできます。このは、両方のメカニズムを示しています。setProgress()doInBackground()

余談ですが、@ kleopatraと@mKorbelの提案を繰り返して、あなたがを達成しようとしているのかをよりよく説明します。

于 2012-11-14T14:33:45.167 に答える
1
  • JOptionPaneプレーンの代わりに使用JDialog

  • JOptionPane何らかのアクションが実現するまでコードの実行をブロックする

  • JComponentsJOptionPane同じように追加できますJDialog

于 2012-11-14T11:32:33.950 に答える