JOptionPane. Программа не отображает сообщение об ошибке - PullRequest
1 голос
/ 22 марта 2012

У меня есть этот код, который запрашивает имя пользователя и пароль.Просто простая JOptionPane.Программа должна запросить ввод, и если пользователь не записал никаких данных в имени пользователя, она должна отобразить сообщение об ошибке и отобразить то же самое предыдущее диалоговое окно с запросом имени пользователя.Тем не менее, это не работает таким образом.Несмотря на то, что я ничего не вводил, он все равно переходит к диалоговому окну пароля.Пожалуйста, проверьте мою логику, возможно, я был немного смущен;и есть ли способ проверить, является ли ввод в showInputDialog строкой?чем-то вроде NumberFormatException для целых чисел?Исключение для метода catch тоже не работает.:) Заранее спасибо.

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);

    }


}

Ответы [ 2 ]

3 голосов
/ 22 марта 2012

Это должно решить проблему:

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

и по этому вопросу:

есть ли способ проверить, является ли ввод в showInputDialog строкой?

showInputDialog() возвращает строку, четные числа, она читает их как строку.

2 голосов
/ 22 марта 2012

попробуйте объявить

String name = "";

вместо

String name = null;

и затем проверьте, является ли имя строки пустым в условии цикла и в условии if.

while (name.equals(""))

...

if (name.equals(""))

Это потому, что метод showInputDialog возвращает String, и для сравнения String используется правильный метод objectString.equals (anotherObjectString), вы сравнивали String, возвращенную из showInputDialog, с нулевым значением, которое всегда возвращает false.

...