2016-12-21 1 views
2

Null 포인터 예외가 생성되는 방법에 대한 읽기 노력에도 불구하고이 코드가 내 코드에서 어떻게 발생하는지 전혀 알 수 없습니다.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()) 

을 수행하기 전에 무효 확인을 넣어 무효 입력은 일부 입력을 검사하기에 충분합니다.

개선 : 당신이 당신의 입력의 유효성을 검사 regex을 사용할 수 있으며, 입력에서 - 적어도 하나 이상의 정수 숫자가 포함되어야이

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

} 

\\d+ 검사처럼 숫자 나하지 않습니다.

+1

오, 그게 가장 흥미 롭습니다. 도와 줘서 고마워, 이걸로 배워야 겠어. – juiceb0xk

+0

@ juiceb0xk 내가 도울 수있어서 기쁘다. 개선 부분을 사용하여 논리를보다 강력하고 행복하게 만든다. –

1

내가 이해 어떤 문제는 당신이 IsEmpty 함수() 널 포인터 예외가 발생합니다 (newInput) 값이 널 (null)에 방법을 확인하는 것입니다.이 아래에 확인해야합니다 :

을 대신 이것 :

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

이를 수행

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

} 

이 잘 작동합니다. 희망이 도움이 ...!

+1

'newInput == null'은 아니고'newInput = null'이 아니다. –

+0

미안하지만 오타가있다. 나는 그것을 고칠 것이다 .. :) –

+0

도와 줘서 고마워, 이제는 모두 의미가있다. – juiceb0xk

관련 문제