さて、私はちょうど同じような質問をしたことを知っていますが、それを単純化しようとしたので、私は悪い例と思われるものを使用しました。質問。
私はこのような設定をしています:
EDTにメソッドがあります。一連のJTextAreasを循環し、空のJTextAreasを削除します。
それで、キャッチは何ですか?
JTextAreaが削除されるたびに、リスナーがトリガーされ、GUIが視覚的に更新されます(JTextAreaの下にあるすべてのビジュアルオブジェクトが引き上げられます)。
では、どうなりますか?さて、ループが実行されている間、JTextAreasは視覚的に削除されず、EDT queに追加され(推測します)、ループが完了した後にすべて一度に削除されます。次に起こることは、すべてのリスナーが一度に起動し、GUI全体を台無しにすることです。
すべてがEDTで実行されるため、コードは次のように動作することを期待していました。
- 開始サイクル
- 空のJTextAreaを見つける
- 空のJTextAreaを完全に削除->リスナーをトリガーします
- リスナーでコードを実行する
- ループを続ける
- 次の空のJTextAreaを見つけます
- すすぎ、ループの終わりに達するまで繰り返します
プログラムをこのように動作させるにはどうすればよいですか?
空白のJTextAreasを検索する新しいスレッドを作成し、invokeLater(new Runnable())で削除を実行する必要がありますか?検索を行う実際のコードは実際にはCPUを対象としておらず、JTextAreasのarrayListを通過するだけで、チェックはgetText()。equals( "")であるため、実際には必要ないと思います...