メインスレッドでJavaSwingアプリケーションを作成するとどうなりますか?経験則では、EDTでアプリケーションを開始する必要がありますか??助けてください。
3 に答える
Q1。経験則では、EDTでアプリケーションを開始する必要があります
実際には経験則ではありません-ライブラリによって指定された要件のようなものです:
一般に、Swingはスレッドセーフではありません。特に文書化されていない限り、すべてのSwingコンポーネントおよび関連するクラスは、イベントディスパッチスレッドでアクセスする必要があります。
Q2。メインスレッドでJavaSwingアプリケーションを作成するとどうなりますか?
動作する場合と動作しない場合があります。動作は指定されていません。同じページに例が示されています。
別のスレッドでモデルを変更すると、例外が発生したり、表示が破損したりするリスクがあります。
メインスレッドでJavaSwingアプリケーションを作成するとどうなりますか?経験則では、EDTでアプリケーションを開始する必要がありますか?
理論的には重要ではありません。重要なのは、メインクラスで作成されたオブジェクトと比較して、非静的クラスまたはvoidでGUIを作成しないようにすることです。
メインクラスで作成されたオブジェクトは直接アクセスできません。extendsJComponentsと同じ問題です。
assyliasとmKorbelには素晴らしい答えがあります。
私はすべてのSwingアプリケーションを次のクラスのバリエーションで開始します。
import javax.swing.SwingUtilities;
import com.ggl.stopwatch.view.StopwatchFrame;
public class Stopwatch implements Runnable {
@Override
public void run() {
new StopwatchFrame();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Stopwatch());
}
}