查看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);
...
非常感谢提前。
答案 0 :(得分:5)
根据你所写的内容,不,这不会确保可见性(虽然我没有看到声明任何易变的东西会有所帮助)。在this bug中,陈述JDK 6文档中的许多方法错误地声明它们是线程安全的(参见页面底部),JEditorPane.setText
是其中之一(因此声明不在JDK 7文档)。