次の機能を持つアプリケーションに取り組んでいます。
- アプリケーションには、画像と設定のモーダル ダイアログを開くための [画像の読み込み] ボタンがあります。処理の結果が返されるか、ユーザーが気が変わった場合は null で、そのダイアログが戻るまでブロックする必要があります。
- 画像と設定ダイアログにより、ユーザーは
JFileChooser
ダイアログを使用して画像を選択し、画像を処理する詳細レベルを指定できます。「読み込み」ボタンをクリックすると、読み込みダイアログが開きます。 - 読み込みダイアログは、時間のかかる画像処理について詳細に報告するカスタム設計のダイアログである必要があります。ユーザーが処理の終了を許可した場合は、オブジェクトを閉じて元のダイアログに戻す必要があります。元のダイアログは、そのオブジェクトを閉じてアプリケーションに戻す必要があります。ユーザーが処理の実行に時間がかかりすぎると判断した場合は、読み込みをキャンセルして読み込みダイアログを閉じ、画像と設定ダイアログに戻ることができます。
概念的には、これは私にはそれほど難しくないように思えます。ただし、これを Swing 内で機能させる方法を決定しようとすると、どういうわけかまとめることができません。私が読んだことによると、GUI コンポーネントの多くはスレッドセーフではないため、Swing のイベント スレッドでインスタンス化する必要があります。これらの同じコンポーネントは、メソッドと同様の呼び出しでブロックする必要があります (ただし、カスタム コンポーネントを作成する必要があるため、同じではありません) JOptionPane.showInputDialog()
。ただし、これらの呼び出しでは、イベント スレッドで新しいコンポーネントをインスタンス化し、アプリケーションに値を返す前にイベント スレッドでイベントが発生するのを待つ必要があります。これに、ダイアログからポップアップするダイアログが必要であるという事実と相まって、かなり迷っています。
ダイアログに関する Java チュートリアルと、StackOverflow および他のサイトに関するいくつかの投稿を読み、正しく機能するクラスを設計する方法を判断しようとしました。どういうわけか、これがどのように機能するのか(最初のブロッキング呼び出しの後にイベントスレッドがスリープ状態になるのではないですか?)、およびこれを機能させるために必要なカスタムクラスをどのように記述できるかがわかりません。率直に言って、自分の混乱を説明できるほど十分に理解しているかどうか確信が持てません。
モーダル ダイアログがインスタンス化されたときに内部で何が行われているのか、誰か説明してもらえますか? 上記のように必要な方法で動作するダイアログ クラスを作成するにはどうすればよいですか?