我还有另一个问题,那就是“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());
}
答案 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();