在简化版中,我所拥有的是:
public class MyLabel extends JLabel implements MouseListener{
private SomeControl control;
public MyLabel(SomeControl control){
this.addMouseListener(this);
this.control = control;
}
@Override
public void mouseClicked(MouseEvent arg0) {
Object x = this.control.getSomeProperty();
}
即使我在构造MyLabel实例时调试并验证控件及其someProperty不为null,当事件被触发并且处理程序进入时,它会将someProperty显示为null,这可能是什么问题?
答案 0 :(得分:1)
如果可以,请将代码更改为:
(编辑:早上太早..忘了最后一句: - )
private final SomeControl control;
你必须在构造函数中执行“control = new ......”,但如果你只想在一个地方分配它,那么这就是让编译器帮助你的方法。 / p>
另外,你确定NullPointerException不在方法调用中吗?
它显示someProperty就像它一样 null,这可能是什么问题?
基于我假设我误解了你在说什么......你是说someProperty()方法调用返回null?如果是这种情况,请执行以下操作:
...
public void setPropert(... value)
{
if(value == null)
{
throw new IllegalArgumentException("value cannot be null");
}
}
然后你会看到代码的哪一部分将属性设置为null。
答案 1 :(得分:1)
在MyLabel
构造函数中,当control
添加为this
时,MouseListener
的值为空(default}。如果此时调用了侦听器,它将看到null值。随后,在调试器报告时,使用非null参数值更新control
值。我怀疑异常可能是转义this
,正如here所述。
答案 2 :(得分:0)
我很确定该属性在代码中的其他位置设置为null。 您可以尝试在someProperty字段上设置观察点并进行调试以查看它何时变为空。
或者您可以为我们提供一些可编辑的代码,因此我们可以自己尝试。