1

で作業しているときになぜEDTJavaの使用を余儀なくされたのか、何度も思います。からコンポーネントを更新する方がはるかに簡単ではないでしょうか。つまり、.SwingSwingThreadmultithreaded

確かに、イベントを並べるのSwingUtilities.invokeAndWaitSwingUtilities.invokeLater役立ちますが、 コンポーネントが他の.SwingGUIThread

Swingそして、Java メーカーはスレッドセーフにすることを本当に忘れているのでしょうか?

スイングがマルチスレッド化されている場合、どのような問題が発生する可能性がありますか? 私のJavaプログラムは、これのために何十回も「凍結」しています:/

4

1 に答える 1

7

スイングがマルチスレッド化されている場合、どのような問題が発生する可能性がありますか? Java メーカーは Swing をスレッドセーフにすることを本当に忘れているのでしょうか?

マルチスレッド GUI を作成するために多くの試みがなされてきましたが、ほとんどの場合、機能しないか、適切に使用するには複雑すぎるために失敗しました。シングル スレッド モデルは、標準的で最も単純なソリューションです。

私のJavaプログラムは、これが原因で何十回も「凍結」しています

それは、Swing を適切な方法で使用していないためです。シングルスレッドであるという事実は、別のスレッドで長いタスクを実行することを妨げません (フリーズを防ぐためにそうする必要があります)。詳細については、 Swing の同時実行のチュートリアル を参照してください。特に:

Swing プログラマーにとって、並行処理を慎重に使用することは特に重要です。適切に作成された Swing プログラムは、同時実行性を使用して、決して「フリーズ」しないユーザー インターフェイスを作成します。プログラムは、実行中の操作に関係なく、常にユーザーの操作に応答します。レスポンシブなプログラムを作成するには、プログラマーは Swing フレームワークがスレッドを使用する方法を学ぶ必要があります。

于 2013-01-05T12:47:01.397 に答える