1

カテゴリ「Javanoobs」に移動する別の質問がありました。
今回の問題は次のとおりです
。ボタンをクリックできる人が必要で、JOptionPaneが表示されます。ただし、ボタンをクリックすると例外が発生します。

私のJButton:

    inputChar = new JButton("Guess Letter");
    add(inputChar);
    this.add(Box.createVerticalStrut(10));
    inputChar.setAlignmentX(Component.CENTER_ALIGNMENT);
    inputChar.addActionListener(this);



public void actionPerformed(ActionEvent e) {

    String action = e.getActionCommand();

    if (action == "Guess Letter"){
        gl.getChar();
    }   

これで、getChar()メソッドは別のクラスにあり、次のようになります。

public String getChar(){
    inChar = JOptionPane.showInputDialog("Please enter letter (a-z)");
    if (inChar.length() > 1){
        JOptionPane.showMessageDialog(null, "Your Input is incorred, please input char", "Input warning", JOptionPane.WARNING_MESSAGE);
    }
    return inChar;
}

回線上の例外トリガーgl.getChar();

そして例外は次のとおりです:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at Interface.ButtonPanel$1.actionPerformed(ButtonPanel.java:34)

それを修正する方法はありますか?

編集注:

Loagansのヒントでなんとか修正できました。基本的に、GuessedLettersクラスでは、コンストラクターsetter / gettersを設定し、アクションリスナーではそれらを設定するメソッドを設定します。

次のActionListenerで解決される問題:

    if (action == "Guess Letter"){
        inputChar = JOptionPane.showInputDialog("Please enter letter (a-z)");
        if (inputChar.length() > 1){
            JOptionPane.showMessageDialog(null, "Your Input is incorred, please input char", "Input warning", JOptionPane.WARNING_MESSAGE);
        }else{
        GuessedLetters glr = new GuessedLetters(inputChar);
        glr.setInChar(inputChar);
        //For testing purposes
        System.out.println(glr.getInChar());
        }
4

1 に答える 1

1

this.actionPerfomedを呼び出すことができるため、メインクラスはおそらく別のクラスを拡張しているようです。つまり、メインクラスでアクションを実行すると、そのメソッドがトリガーされます。代わりに、特定のボタンにactionListenerを追加する必要があります。

文字列値を比較しているため、String .equalsメソッドを使用するには、action==comparationを変更する必要があります。その==は、両方の値がnullであるため、起動時にウィンドウをトリガーしている可能性があり、nullポインター例外でウィンドウを表示している可能性がありますか?

次に、ユーザーが押す特定のボタンにアクションリスナーを追加する方法を次に示します。

    viewInsertFileButton.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(final java.awt.event.ActionEvent evt) {
            displayJOptionPaneHere();
        }
    });

したがって、メインアプリケーションで実行されるactionPerformedではなく、特定のボタンで実行されるアクションを含むJOptionPaneのみを表示する必要があります。

これがnullポインタ例外の原因だと思います。

 if (inChar.length() > 1){

それを呼び出す前に、inChar!=nullかどうかを確認してください。コードをその中にラップできるので、最初からnullでない場合にのみif(inChar.length()> 1を呼び出します。これは私がいつも遭遇する一般的な問題であり、nullでメソッドを呼び出します。物体。

このように変更すると、例外がなくなるはずです。

public String getChar(){
    inChar = JOptionPane.showInputDialog("Please enter letter (a-z)");
    if (inChar != null) {
       if (inChar.length() > 1){
           JOptionPane.showMessageDialog(null, "Your Input is incorred, please input char", "Input warning", JOptionPane.WARNING_MESSAGE);
       }
     } else {
          inChar = ""
     }

    return inChar;
}

ここでもglがnullになるのを防ぐことができます。

if (gl == null) {
   gl = new gl();
}

    gl.getChar();
于 2012-08-11T18:51:51.753 に答える