- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:イベントとスレッド)
スレッドとイベントに関するJava初心者の質問
このQ&Aのポイント
- Java初心者がSwingを使ってアプリケーションを作成している際に、ボタンが配置されたダイアログ上でスレッドを作成していると、別のウィンドウでダイアログを再表示するとボタンが押せなくなる現象が起きる。
- スレッドとイベントが関係している可能性があり、初心者なので理解が不足している。
- 具体的なプログラムが提示できないため、分かりづらいが、アドバイスを求めている。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
はい。お気付きのことがあります。 Swingでは、スレッドは使えません! Swingのコンポーネントは、スレッドセーフではない…。 つまり、他のスレッドからメソッドを呼び出しても大丈夫なようにはできてないのです。 (例外はrepaint()で、これは他から呼び出しても大丈夫です) この性質によっておかしくなっているかどうかはわからないので、自信なしとしますが、 とにかくスレッドセーフとはなっていません。 Swingコンポーネントを、正規に他のスレッドから操作しようとすると、 SwingUtilityクラスのimvokeLater(もしくはinvokeAndWait)メソッドに、 Runnableのオブジェクトを与える…などの手間が 必要になります。(詳しくは該当APIドキュメントを参照ください) できればスレッドを使う以外の方法を考えてみてください。
お礼
回答ありがとうございます。 (A)にはプログレスバーが配置されていて、ボタンが押されたときに作られるスレッドで、 SwingUtility#imvokeLaterを使って更新するようなことをしています。 (A)には、もうひとつキャンセルボタンもあって、途中で動作を止める、というようなこともしています。 このあたりが複雑で、初心者には難解です。。。 とにかくありがとうございました。