0

我总是在 main 方法中的 validateCarPlate(nStr) 线上和 if(y.matches(rex)) 线上得到 nullPointerException。我应该如何编辑以删除 nullPointerException?

import javax.swing.*;
import java.lang.Exception;

public class Q2{
public static void main(String[]args){
boolean loop = true;
while(loop){
   String nStr = JOptionPane.showInputDialog("Enter car plate number: ");
   try{
       validateCarPlate(nStr);
}
catch(InvalidCarPlateException e){
}
}
}
public static void validateCarPlate(String y)throws InvalidCarPlateException{
String rex = "[a-zA-Z]{3}[0-9]{1,4}";
if(y.matches(rex)){
    computeCheckDigit(y);
}else{
    throw new InvalidCarPlateException();
}
}

public static void computeCheckDigit(String x){
char [] arr = new char[x.length()];
for(int i=0; i<x.length();i++){
    arr[i] = x.charAt(i);
}
4

3 回答 3

2

好像

String nStr = JOptionPane.showInputDialog("Enter car plate number: ");

这返回空

像这样更改代码

public static void main(String[]args){
  boolean loop = true;
  while(loop){
   String nStr = JOptionPane.showInputDialog("Enter car plate number: ");
   if(nStr != null)
   {
     try{
       validateCarPlate(nStr);
        }
     catch(InvalidCarPlateException e){
     }
   }
  }
}

因为,javadocsJOptionPane#showInputDialog()显示了一个请求用户输入的问题消息对话框,我想你忘了提供输入。

于 2013-04-15T05:59:41.363 回答
1

如果单击Cancel按钮,JOptionPane.showInputDialog将返回一个null. nStr您可以在传递给之前检查返回值validateCarPlate。如果null返回,只需删除它nStr并继续循环(或根据您的要求中断它)。

于 2013-04-15T06:04:55.540 回答
1

像那样改变你的方法

public static void validateCarPlate(String y)throws InvalidCarPlateException{
String rex = "[a-zA-Z]{3}[0-9]{1,4}";
if(y == null){
     // put some message to handle that exception such as
     // JOptionPane.showMessageDialog(null,"Some Message");
}else if(y.matches(rex))
    computeCheckDigit(y);
}else{
    throw new InvalidCarPlateException();
}
}

还要放上computeCheckDigit(y)的代码;方法。

于 2013-04-15T05:59:10.393 回答