私のアプリケーションでは、AWTのイベントディスパッチスレッド(EDT)で開始された一部のプロセスが、特定の状況下で中断される場合があります。次に、ユーザーからの入力を待ちます。残念ながら、プロセスがEDTに配置されているため、アプリケーション全体がフリーズし、ユーザーはプロセスを再起動できず、デッドロックが発生します。EDTを中断して、別のスレッドから新しいイベントポンプを起動する方法はありますか?その後、ユーザーはUIを操作できるようになります。
私がやろうとしていることは、コンポーネントが複雑であるためにダイアログが必要ないことを除けば、モーダルダイアログを開くのとほぼ同じように見えます。ルートペインのすぐ内側に表示したいです。そこで、java.awt.Dialogでどのように行われるかを見て、かなりよく理解しましたが、使用される最も重要なクラス(EventDispatchThread、SequencedEvent、...)は保護されているため、アクセスできません。
回答ありがとうございます。
具体的に説明します。私は実際に、自家製のスクリプト言語を組み込んだアプリケーションに取り組んでいます。この言語用のデバッガーを開発しています。デバッガー(すべてのデバッガーと同様)は、ブレークポイントに達するたびにスクリプトの実行を停止します。スクリプト化されたプロセスは、コード内の多くの場所(EDTを含む)からトリガーできるため、EDTからプロセスを削除することはできません。デバッガーUIをアプリケーションに埋め込みたい(正確にはサイドペインに)。したがって、ブレークポイントに達したときに、現在のスレッド(おそらく、主に言うまでもなくEDT)を中断する必要があり、少なくともデバッガーのUIは引き続き応答する必要があります。また、私はJDK 1.4の上で開発しているので、残念ながらJDK7を使用する方法はありません。
私が現在行っているのは、デバッガーが埋め込まれたJDialogを開くことです。すべて正常に動作しますが、私が言ったように、デバッガーをメインウィンドウに直接埋め込む必要があるため、このソリューションには完全には満足していません。