2016-12-21 17 views
2

Null Pointer例外がどのように生成されるかについての読者の努力にもかかわらず、このエラーがコード内でどのように生成されているのかを知りません。JOptionPane.showMessageDialogがキャンセルされたときのヌルポインタ例外

これは私のコードに直接影響するとは思えませんが、私は例外をキャッチすることができますが、それを行う前に、エラーについてさらに詳しく知りたいと思います。

エラーが発生しているコードの一部です。新しい入力ダイアログを開き、ユーザーの入力を待っています。ユーザーが入力ダイアログをキャンセルした場合、それは単にダイアログを閉じることを意味します。ただし、キャンセルするたびにエラーが表示されます。ユーザが入力ダイアログで「OK」ボタンを押すと

String newInput = JOptionPane.showInputDialog(null, "Your current holdings are: " 
     + cable.getHoldings(), "Edit Holdings", JOptionPane.CANCEL_OPTION); 

if (newInput.isEmpty()) 
{ 
    //Error generated here 
    JOptionPane.showMessageDialog(null, "Please enter in a number!"); 

} 

else 
{...} 

メッセージダイアログがのみトリガーされます。

は、ここでは、コードです。それ以外の場合、ユーザーが入力ダイアログをキャンセルまたは終了すると、ヌルポインター例外エラーが生成されます。

誰もが私を助けて、なぜこれが起こっているのか教えていただけますか?

ありがとうございます。

+0

エラーログを投稿する –

+0

http://pastebin.com/v4KFpKj6 – juiceb0xk

答えて

4

From docs

戻り値:ユーザーの入力、またはnull意味は、ユーザーが入力

をキャンセルのでretrunsnullユーザーがダイアログ

showInputDialogからソースコードをキャンセルした場合

if (value == UNINITIALIZED_VALUE) { 
      return null; 
     } 

ソリューション:それはそうであっても、ユーザはスペースの長さが1になるか、長さがある場合にはnullになります入り、文字列の長さをチェックしますので、あなたがnewInput.isEmpty()を必要としないもの

if (newInput==null || newInput.isEmpty()) 

を行う前に、NULLかどうかのチェックを入れてキャンセルされた入力があるので、無効のチェックは入力をチェックするだけです。

改善:あなたはあなたの入力を検証するためにregexを使用することができ、入力時に、少なくとも一つ以上の整数の桁数含まれている必要があります。この

if (newInput==null || !newInput.matches("\\d+")) 
{ 
    JOptionPane.showMessageDialog(null, "Please enter in a number!"); 

} 

\\d+チェックのように、数字またはではありません。

+1

ああ、それは最も面白いです。ご協力いただきありがとうございます、私はこれから学ぶことになります。 – juiceb0xk

+0

@ juiceb0xk私は助けてくれることができてうれしくて、改善部分を使って、あなたのロジックをもっと頑丈で幸せなコーディングにすることができました。 –

1

私が理解し何の問題は、あなたがのisEmpty()nullポインタ例外がスローされます(newInput)値はnullに方法をチェックしているということです。あなたは以下これをチェックする必要があります

の代わりに、この:これは正常に動作する必要があり

if (newInput == null) 
{ 
    //Error generated here 
    JOptionPane.showMessageDialog(null, "Please enter in a number!"); 

} 

if (newInput.isEmpty()) 
{ 
    //Error generated here 
    JOptionPane.showMessageDialog(null, "Please enter in a number!"); 
} 

はこれを行います。お役に立てれば...!!!

+1

'newInput == null'は' newInput = null'ではありません。 –

+0

ごめんなさい。私はそれを修正します.. :) –

+0

あなたの助けをありがとう、それは今すべての意味があります。 – juiceb0xk

関連する問題