2016-11-05 12 views
1

クリックしたときにSpanButtonでクライアントプロパティを取得しようとしています。それはNullPointerExceptionをスローしています。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

getComponent()の代わりに、getActualComponent()という名前を使用してください。そのような鉛成分が利用可能な場合鉛成分が返されるという事実を除いてActionEvent#getComponent()と同じです

JavaDocsは理由を説明します。

これは、MultiButtonなどのコンポーネントで重要です。これは、代わりに下にあるボタンを返します。

関連する問題