Java:如何使用JButton打开JOptionPane

时间:2012-08-11 18:08:22

标签: java swing nullpointerexception jbutton joptionpane

我还有另一个问题,那就是“Java noobs”类别 这次我的问题如下:
我需要人能够点击按钮,它会显示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());
        }

1 个答案:

答案 0 :(得分:1)

看起来你的主类可能会扩展另一个类,因为你可以调用this.actionPerfomed。这意味着您的主类上的任何操作都将触发该方法。你应该做的是将actionListener添加到你的特定按钮。

您需要更改action == comparison以使用String .equals方法,因为您正在比较字符串值。那个==可能在启动时触发窗口,因为两个值都为null,所以它显示带有空指针异常的窗口可能?

然后,您将如何向用户推送的特定按钮添加动作侦听器。

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

因此,您只想显示JOptionPane,并在该特定按钮上执行操作,而不是在主应用程序上执行任何actionPerformed。

我认为这会导致空指针异常。

 if (inChar.length() > 1){

在你打电话之前,检查inChar!= null。你可以将你的代码包装在其中,所以它只调用if(inChar.length()> 1如果它不是空的开头。这是我一直遇到的一个常见问题,调用一个方法null object。

将其更改为此类,您的例外情况应该消失。

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在这里不为空。

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

    gl.getChar();