0

メインメソッドの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: ");

これはnullを返します

このようにコードを変更します

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){
     }
   }
  }
}

javadocs forJOptionPane#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 に答える