SpanButton客户端属性抛出NullPointerException

时间:2016-11-05 17:39:53

标签: codenameone

我试图在单击时获取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,因为它支持可变大小。

1 个答案:

答案 0 :(得分:1)

而不是getComponent()使用恰当命名的getActualComponent()

JavaDocs解释原因:

  

ActionEvent#getComponent()相同,但如果此类潜在客户组件可用,则会返回潜在客户组件。

     

这对于MultiButton之类的组件非常重要,它会返回基础按钮。