1

メインスレッドでJavaSwingアプリケーションを作成するとどうなりますか?経験則では、EDTでアプリケーションを開始する必要がありますか??助けてください。

4

3 に答える 3

2

Q1。経験則では、EDTでアプリケーションを開始する必要があります

実際には経験則ではありません-ライブラリによって指定された要件のようなものです:

一般に、Swingはスレッドセーフではありません。特に文書化されていない限り、すべてのSwingコンポーネントおよび関連するクラスは、イベントディスパッチスレッドでアクセスする必要があります。

Q2。メインスレッドでJavaSwingアプリケーションを作成するとどうなりますか?

動作する場合と動作しない場合があります。動作は指定されていません。同じページに例が示されています。

別のスレッドでモデルを変更すると、例外が発生したり、表示が破損したりするリスクがあります。

于 2012-11-15T17:26:38.527 に答える
1

メインスレッドでJavaSwingアプリケーションを作成するとどうなりますか?経験則では、EDTでアプリケーションを開始する必要がありますか?

  • 理論的には重要ではありません。重要なのは、メインクラスで作成されたオブジェクトと比較して、非静的クラスまたはvoidでGUIを作成しないようにすることです。

  • メインクラスで作成されたオブジェクトは直接アクセスできません。extendsJComponentsと同じ問題です。

  • 重要なのは、 初期スレッドでSwingGUIを作成して表示することです。

于 2012-11-15T17:35:27.490 に答える
1

assyliasmKorbelには素晴らしい答えがあります。

私はすべての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());
    }

}
于 2012-11-15T18:18:34.980 に答える