0

I am currently creating a GUI program that has a textfield and a button. I assigned some error handling whenever the user tries to enter a character, and a value less than 2. However, whenever I try to assign an error handling whenever the textfield is empty, an error is showing up.

UserInputField = TextField

EnterBtn = Button

Here is the code where I create error handlings.

@Override
    public void actionPerformed(ActionEvent ae) {
        Boolean BValue = UserInputField.getText().isEmpty();
        int IntValue = Integer.parseInt(UserInputField.getText());
        if (ae.getSource() == EnterBtn) {
            if (IntValue >= 2) {
                frame.setVisible(false);
                frame.dispose();
                SieveWindow SoEAlgoForm = new SieveWindow(IntValue);
            }
            else if (BValue) {
                JOptionPane.showMessageDialog(frame, "Please enter a value greater than or equal to 2", "Alert", JOptionPane.WARNING_MESSAGE);
            }
            //An error message will appear whenever the user tries to enter a value less than 2
            else {
                UserInputField.setText("");
                JOptionPane.showMessageDialog(frame, "Please enter a value greater than or equal to 2", "Alert", JOptionPane.WARNING_MESSAGE);
        }
    }
}

This is the error message showing up whenever I try to press the button while the textfield is empty:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:592) at java.lang.Integer.parseInt(Integer.java:615) at Practice.MainProgram.actionPerformed(MPProblem2.java:80) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.Component.processMouseEvent(Component.java:6533) at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) at java.awt.Component.processEvent(Component.java:6298) at java.awt.Container.processEvent(Container.java:2236) at java.awt.Component.dispatchEventImpl(Component.java:4889) at java.awt.Container.dispatchEventImpl(Container.java:2294) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) at java.awt.Container.dispatchEventImpl(Container.java:2280) at java.awt.Window.dispatchEventImpl(Window.java:2746) at java.awt.Component.dispatchEvent(Component.java:4711) 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$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$JavaSecurityAccessImpl.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$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 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)

I already tried this method when checking if the textfield is empty or not on my other projects, but I haven't encountered this error before.

Richard
  • 27
  • 1
  • 6
  • Most similar questions will have answers that suggest that you surround your parse attempt with a try/catch block, and I suggest that you do the same (please see the duplicate) and notify the user with a JOptionPane error message if the catch is entered. If this doesn't work, then you'll want to create and post a valid [mre] program with your question. The link will explain exactly what I am suggesting and why it can help you and us. – Hovercraft Full Of Eels May 02 '21 at 23:43
  • Thank you! I'll check it out. – Richard May 02 '21 at 23:44
  • *I already tried this method when checking if the textfield is empty* - your code doesn't do anything. All you do is set a Boolean value. However, you use the parseInt(...) method unconditionally on the text of the text field in the next statement. – camickr May 02 '21 at 23:49
  • I created a boolean variable to check if the textfield is empty or not. If it is empty, it will return true, otherwise false. Then I used it in one of my control structure, the else if statement. If the boolean variable is true, then a dialog box will show up. I did the same thing on my previous project, but it worked, however I didn't use a boolean variable, but instead I immediately used NameOfTextField.gettext().isEmpty(). @camickr is the parseInt making the error show up? – Richard May 02 '21 at 23:54
  • 2
    You shouldn't even attempt to parse the text if it's empty. That's where your bug currently is. Fixing that will fix the obvious error that you're currently seeing, and the try/catch can help fix other mistaken parse attempts. – Hovercraft Full Of Eels May 02 '21 at 23:56
  • 1
    @Richard, *it will return true, otherwise false.* - this is an ActionListener. There is no return value, so that statement makes no sense. *is the parseInt making the error show up?* - yes. look at the error message: `For input string: "" at` that is telling you the String is empty, An empty string is not an integer value. You should check if the string is empty. If so, you do your error processing, whatever that is. Also, your code should not check of the source is the Enter button. An ActionListener should not be shared unless you are using generic logic. – camickr May 03 '21 at 00:02
  • Now I get it. I used what @HovercraftFullOfEels's suggestion. I used NumberFormatException to solve the error. I am not sure using the NumberFormatException is the most ideal way to solve the bug. Camickr is it possible to put it outside of the actionPerformed function? – Richard May 03 '21 at 00:09
  • 1
    @camickr is (and I am) suggesting using the boolean obtained in an if statement. Don't even parse the String within a try/catch if the String is empty. This is just basic logic. – Hovercraft Full Of Eels May 03 '21 at 00:10
  • But how would I check if the data entered by the user is a number? Shall I use the valueOf? – Richard May 03 '21 at 00:18
  • 1
    No, you still use the try/catch for those. But for the basic problem of an empty String, use the boolean if test. – Hovercraft Full Of Eels May 03 '21 at 00:20
  • Noted! Thank you Hovercraft and Camickr! – Richard May 03 '21 at 00:21
  • 1
    Another option is to use a `JSpinner`. You can configure it to only allow numbers to be entered. You can even specify minimum/maximum values. But you really should understand the suggestions here first. – camickr May 03 '21 at 00:22

0 Answers0