我试图在单击时获取SpanButton上的客户端属性。它抛出一个NullPointerException。
我用常规按钮测试了相同的代码,它工作得很好。我相信那里可能有一个错误。
以下是如何从准系统项目重新创建此问题:
Form hi = new Form("Hi World");
Button button = new Button("Button");
button.putClientProperty("id", 100);
SpanButton spanButton = new SpanButton("SpanButton");
spanButton.putClientProperty("id", 200);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
int id = (int) evt.getComponent().getClientProperty("id");
System.out.println("Standard Button action listener: id = " + id);
}
});
spanButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
int id = (int) evt.getComponent().getClientProperty("id");
System.out.println("Span button action listener: id = " + id);
}
});
hi.addComponent(button);
hi.addComponent(spanButton);
hi.show();
如果单击按钮,输出将正确打印:
标准按钮动作侦听器:id = 100
如果单击SpanButton,则抛出NullPointerException。经过调查,我发现SpanButton getClientProperty(" id")返回null。
注意:我需要使用SpanButton,因为它支持可变大小。
答案 0 :(得分:1)
而不是getComponent()
使用恰当命名的getActualComponent()
。
JavaDocs解释原因:
与
ActionEvent#getComponent()
相同,但如果此类潜在客户组件可用,则会返回潜在客户组件。这对于
MultiButton
之类的组件非常重要,它会返回基础按钮。