0

查看 JLabel 的源代码,我担心文本字段的可见性。我提取了设置文本字段和检索 oldValue 的基本部分。在我看来,如果 String 文本字段未声明为 volatile,则可见性处于危险之中,因为 firePropertyChange 可能看不到从之前由另一个线程保存的文本字段中检索到的 oldValue。我是对的,还是我错过了什么?请注意,这不是讨论 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

根据您所写的内容,不,这不能确保可见性(尽管我看不出声明任何 volatile 会有什么帮助)。在这个错误中指出,JDK 6 文档中的许多方法错误地声明它们是线程安全的(见页面底部),JEditorPane.setText是其中之一(因此该声明不在 JDK 7 文档中)。

于 2013-02-07T13:06:28.157 回答