0

問題があります。ActionPerformed で jframe2 を呼び出す jframe1 があります。JFrames はスレッドですか? jframe2でwait()メソッドを試してみたので、jframe1でjframe2に通知します..

jframe2 の私のコード (ボタンがクリックされたときに実行されるメソッド):

private void read(){

    synchronized(jframe1){
        try {

            if(writer.checkLast() == null){
                this.wait();
                jLabel.setText(writer.getLast());
            }
            else{
                jLabel.setText(writer.getLast());
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }


}

しかし、問題は、 this.wait(); を使用する場合です。jframe2では、私のjframe1もロックされています..何が間違っていますか?

私の下手な英語に申し訳ありません。誰か答えがあればよろしくお願いします。

4

2 に答える 2

1

フレームはスレッドですか?

いいえ、絶対に違います。すべての描画イベントとユーザー入力イベントが発生する1つのスレッド、イベント ディスパッチ スレッドがあります。ただし、このスレッドはアプリケーションのメイン スレッドとは異なるため、おそらく各フレームに独自のスレッドがあると思われます。

すべてのイベントはイベント ディスパッチ スレッドで発生するため、同期を行う必要はなく、フレームは同期や通知を必要とせずに互いのメソッドを呼び出すことができます。これがそもそもシングル スレッド設計の理由です (一般的なコンセンサスは、マルチスレッド GUI を使用するのはほとんど不可能だということです)。

于 2011-02-22T23:41:46.160 に答える
1

wait() メソッドを使用してモーダル ダイアログの動作をエミュレートしようとしているように感じますが、Michael が上で説明しているように、Swing コンポーネントで wait を呼び出したり、Thread.sleep を使用したりしないでください。別のウィンドウをモーダルに表示したい場合は、代わりに JOptionPane またはモーダル JDialog を使用してください。それはすべてチュートリアルでよく説明されています。

于 2011-02-22T23:46:32.560 に答える