EventAdmin は Swing 環境で安全に使用できますか? 私は次のシーケンスを持っているので、私は尋ねています:
- JButton から ActionListener 通知を受け取る
- JPanel を作成し、イベントのプロパティに配置します。
- EventAdmin#sendEvent(Event) を使用して、イベントを同期的に送信します
- サブスクライバーでイベントを受け取る
- プロパティから JPanel を取得し、EDT にない場合は SwingUtilities#InvokeAndWait を使用して、いくつかの JComponents を内部に配置します。
- EventAdmin#sendEvent() の呼び出し元で、メソッドが返され、JPanel が入力され、それをダイアログに追加して表示できます。
これの目的は、すべてのサブスクライバーが呼び出されたときに表示される JPanel に必要なものをサブスクライバーがインストールできるようにすることです。
ボタンを初めてクリックすると、すべてが EDT で実行されるため、すべてがうまくいきます。2 回目は、サブスクライバーが EDT ではないスレッドで呼び出されます。したがって、invokeAndWait によって起動された実行可能ファイルで JComponent のインストールを実行します。この呼び出しは 5022 ミリ秒ブロックされます (5000 ミリ秒はデフォルトの EventAdmin タイムアウト時間です)。ブロックが解除されると、私のダイアログが表示されます。次の時間、私のサブスクライバーはもう呼び出されません。EventAdmin によってブラックリストに登録されている必要があります。
サブスクライバーが EDT で 2 回目に呼び出されないのはなぜですか?