0

Очень новое для графического интерфейса. Попытка сделать мои исключения для исключения кода, когда пользователь оставляет пустое поле или когда пользователь не вводит целое число. Когда я использовал InputMismatchException, окно GUI продолжало бы работать, но у меня было бы количество ошибок в окне вывода на NetBeans.(Java) GUI NumberFormatException исключает исключение, но висит окно

Когда я переключил блок catch на NumberFormationException, в окне вывода ничего нет, но окно графического интерфейса перестает работать, поскольку я не могу ничего вводить, изменять что-либо или даже закрывать окно без принудительной остановки прогона.

Работает нормально, когда вводится целое число, но все остальное зависает.

Код, который содержит блок примерочных Загвоздка:

private void createAnswerField() 
{ 
    answerField = new JTextField(5); 

    answerField.addActionListener(new CustomActionListener()); 
} 

/** 
* When the user presses enter in the text field, this is the class that makes the rest happen 
*/ 
class CustomActionListener implements ActionListener 
{ 
    @Override 
    public void actionPerformed(ActionEvent event) 
    { 
     boolean correctInput = false; 

     while(!correctInput) 
     { 
      try 
      { 
       userInput = Integer.parseInt(answerField.getText()); 
       correctInput = true; 

       if (userInput == getCorrectAnswer()) 
       { 
        if (counter > 1) //Fixes the try/tries problem 
        { 
         answerLabel.setText("Yay! It took you " + counter + " tries."); 
        } 
        else 
        { 
         answerLabel.setText("Yay! It took you " + counter + " try."); 
        } 
       } 
       else //hangs up here, never changes the answerLabel 
       { //I believe I need to clear userInput or something of that nature 
        answerLabel.setText("Incorrect. Please try again."); 
        counter ++; 
       } 
      } 
      catch(NumberFormatException e) 
      { 
       answerLabel.setText("Integers only please!"); 
       correctInput = false; 
      } 
     } 
    } 
} 

EDIT: Ошибки это дает мне, когда я использую InputMismatch является:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "a" 
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
at java.lang.Integer.parseInt(Integer.java:580) 
at java.lang.Integer.parseInt(Integer.java:615) 
at guiapp.MathTutor$CustomActionListener.actionPerformed(GUIApp.java:167) 
at javax.swing.JTextField.fireActionPerformed(JTextField.java:508) 
at javax.swing.JTextField.postActionEvent(JTextField.java:721) 
at javax.swing.JTextField$NotifyAction.actionPerformed(JTextField.java:836) 
at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1663) 
at javax.swing.JComponent.processKeyBinding(JComponent.java:2882) 
at javax.swing.JComponent.processKeyBindings(JComponent.java:2929) 
at javax.swing.JComponent.processKeyEvent(JComponent.java:2845) 
at java.awt.Component.processEvent(Component.java:6302) 
at java.awt.Container.processEvent(Container.java:2234) 
at java.awt.Component.dispatchEventImpl(Component.java:4881) 
at java.awt.Container.dispatchEventImpl(Container.java:2292) 
at java.awt.Component.dispatchEvent(Component.java:4703) 
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1954) 
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:806) 
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1074) 
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:945) 
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:771) 
at java.awt.Component.dispatchEventImpl(Component.java:4752) 
at java.awt.Container.dispatchEventImpl(Container.java:2292) 
at java.awt.Window.dispatchEventImpl(Window.java:2750) 
at java.awt.Component.dispatchEvent(Component.java:4703) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) 
at java.awt.EventQueue.access$500(EventQueue.java:97) 
at java.awt.EventQueue$3.run(EventQueue.java:709) 
at java.awt.EventQueue$3.run(EventQueue.java:703) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86) 
at java.awt.EventQueue$4.run(EventQueue.java:731) 
at java.awt.EventQueue$4.run(EventQueue.java:729) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 

ответ

1

Вы ловя НФО просто отлично , но вы все еще попадаете в ваш цикл while. Таким образом, вы просто бросаете бесконечные исключения, потому что вы устанавливаете correctInput в значение false, которое продолжает цикл.

+0

О, вы правы. Мне нужно исправить мой цикл. EDIT: Если я удаляю цикл while, он работает нормально. Большое спасибо – bankey

+0

С удовольствием помогите. Примите мое решение с помощью галочки. – Zircon

Смежные вопросы