0

JLabel のソース コードを調べると、テキスト フィールドの可視性に懸念があります。テキストフィールドを設定し、oldValue を取得するために必要な部分を抽出しました。私の意見では、String テキスト フィールドが volatile と宣言されていない場合、以前に別のスレッドによって保存されたテキスト フィールドから取得された oldValue が firePropertyChange に表示されない可能性があるため、可視性が危険にさらされています。私は正しいですか、それとも何かを見逃していますか?これは SwingUtility について議論するものではないことに注意してください。

public class JLabel extends JComponent implements SwingConstants, Accessible {
    ...

    private String text = "";         // "" rather than null, for BeanBox

    ...

    public void setText(String text) {

        String oldAccessibleName = null;
        if (accessibleContext != null) {
            oldAccessibleName = accessibleContext.getAccessibleName();
        }

        String oldValue = this.text;
        this.text = text;
        firePropertyChange("text", oldValue, text);

    ...

よろしくお願いします。

4

1 に答える 1

5

あなたが書いたことに基づいて、いいえ、それは可視性を保証しません(ただし、揮発性を宣言することがどのように役立つかはわかりません)。このバグでは、JDK 6 ドキュメントの多くのメソッドが、スレッドセーフであると誤って宣言していることが述べられています (ページの下部を参照)。JEditorPane.setTextそれらの 1 つです (したがって、このステートメントが JDK 7 ドキュメントにない理由です)。

于 2013-02-07T13:06:28.157 に答える