3

I have a class name Foo that extends JFrame. The Foo class has several components and one object x as private fields and those components never use object x or vice versa (means components are completely independent on x). Of course the instantiation of Foo class is placed inside EDT but situation is I'm going to change value of object x from non EDT thread like (Foo.x.getValue() == ..... ). Should it be placed inside EDT? If it's gonna look like this:

SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            foo.x.setValue(newValue);
        }
    });
4

2 に答える 2

3

GUI に直接影響することだけを EDT で実行する必要があります。変数が GUI オブジェクトのメンバーであっても、必ずしも EDT から排他的にアクセスする必要はありません。これは自分で追加したメンバーであり、GUI と対話しないことが確実であるため、好きなスレッドで自由に変更できます。

コンポーネントの 1 つxが表示方法を決定するために読み取りを行う場合xでも、GUI の更新自体が EDT で行われる限り、任意のスレッドで変更できます。複数のスレッドで使用されているxかどうかを確認してください。volatile

ただし、別の場所に属しているように聞こえxます。

于 2012-08-13T10:25:11.577 に答える
1

xUI要素(JTextfield、JTable、javax.swing。*)の場合、例と同じようにEDTを使用する必要があります。

それ以外の場合、ここで適用される制限はありません。

于 2012-08-13T07:37:15.637 に答える