2012-03-22 5 views
1

사용자 이름과 암호를 묻는 코드가 있습니다. 그냥 간단한 JOptionPane. 프로그램은 입력을 요청해야하며 사용자가 사용자 이름에 아무런 입력도 쓰지 않으면 오류 메시지를 표시하고 사용자 이름을 묻는 동일한 이전 대화 상자를 표시해야합니다. 그러나, 그것은 그렇게 작동하지 않습니다. 아무 것도 입력하지 않더라도 여전히 암호 대화 상자로 진행됩니다. 제 논리를 확인해주세요. 조금 혼란 스러웠을 수도 있습니다. 또한 showInputDialog의 입력이 문자열인지 확인하는 방법이 있습니까? 정수의 경우 NumberFormatException과 다소 비슷합니까? catch 메소드의 예외는 작동하지 않습니다. :) 미리 감사드립니다.JOptionPane. 프로그램에 오류 메시지가 표시되지 않습니다.

public class SwingExercise { 

public static void main(String[] args) { 


    String name = null; 
    boolean input = true; 

    try { 
     while (input) { 
      while (name == null) { 
       name = JOptionPane.showInputDialog(null, "Enter username:"); 
       if (name == null) { 
        JOptionPane.showMessageDialog(null, "No input.", "Error", JOptionPane.ERROR_MESSAGE); 
       } 
      } 
      String pw = JOptionPane.showInputDialog(null, "Enter password:"); 
      input = false; 
     } 
    } catch (Exception e) { 
     JOptionPane.showMessageDialog(null, "Invalid input.", "Error", JOptionPane.ERROR_MESSAGE); 

    } 


} 
+0

대부분 환영합니다 .--) –

+0

'JOptionPane.showInputDialog (null, "암호 입력 :");'['JPasswordField'] 사용 (http://docs.oracle.com/javase/7 /docs/api/javax/swing/JPasswordField.html)를 사용하여 비밀번호를 얻으십시오. 자세한 내용은 [암호 필드 사용 방법] (http://docs.oracle.com/javase/tutorial/uiswing/components/passwordfield.html)을 참조하십시오. –

+0

@Layne : 귀하의 코드를 수정했는지 Andrew Thompson이 말했던 것, 매우 진실한 요점을 보았습니다 :-) –

답변

3

이 문제를 해결한다 :이 질문에 대한

if(name == null || name.equals("")) { 
    JOptionPane.showMessageDialog(null, "No input.", "Error", JOptionPane.ERROR_MESSAGE); 
    name = null; 
} 

및 다음 showInputDialog의 입력 문자열이 있는지 확인하는 방법도

이를?

showInputDialog() 문자열을 짝수로 반환합니다. 문자열로 읽습니다.

+0

안녕하세요, 응답 해 주셔서 감사합니다! :) 귀하의 코드가 작동했습니다 : D 그러나, 만약 내가 이름과 숫자가 필요 없다면 어떻게 그 조건을 가질 수 있을까요? – Layne

+1

+1, 멋진 답변 :-) –

+1

@Layne :'JDialog'을 사용하고'JTextField'를 하나 추가하고'JTextField'를 추가하여'DocumentListener'를 추가하여 알파벳과 숫자는 허용하지 않습니다 :-) Or 그렇지 않으면 true를 반환하면'name' 문자열의 각 색인을 통해 모든 숫자의'name' 문자열을 검사하고 플래그를 지정하고 ERROR를 표시합니다. –

2

시도

String name = ""; 

대신

String name = null; 

의 선언하고 문자열 이름이 루프 상태에서 비어있는 경우 다음 확인하고 만약 조건이다.

while (name.equals("")) 

... 문자열을 반환 showInputDialog 방법 및 문자열을 비교하는 올바른 방법이 objectString.equals (anotherObjectString)를 사용하기 때문에, 당신은 문자열을 비교 한 것

if (name.equals("")) 

은에서 반환 showInputDialog가 null의 경우, 항상 false를 리턴합니다.

+0

오, 좋습니다. 감사! :) – Layne

+2

사실, showInputDialog (...)에서'Cancel'을 클릭하면 null 문자열'String'을 반환합니다. 따라서 null은 조건 내에서 테스트해야하지만, ""(EMPTY String) 테스트에서는 +1 : –

+0

맞습니다. 깜빡 했어요! – Giovani

관련 문제