【问题标题】:NumberFormatException - how to fix it?NumberFormatException - 如何解决?
【发布时间】:2018-11-02 09:08:42
【问题描述】:

当我在输入jTextField1 之前输入jTextField2 时,我得到了这个错误堆栈跟踪:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "Enter"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.lang.Double.parseDouble(Double.java:538)
at suvatcalc.CalculatorFrame.jTextField2KeyReleased(CalculatorFrame.java:263)
at suvatcalc.CalculatorFrame.access$200(CalculatorFrame.java:14)
at suvatcalc.CalculatorFrame$3.keyReleased(CalculatorFrame.java:78)
at java.awt.Component.processKeyEvent(Component.java:6500)
at javax.swing.JComponent.processKeyEvent(JComponent.java:2832)
at java.awt.Component.processEvent(Component.java:6316)
at java.awt.Container.processEvent(Container.java:2239)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2297)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1954)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:835)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1103)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:974)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:800)
at java.awt.Component.dispatchEventImpl(Component.java:4760)
at java.awt.Container.dispatchEventImpl(Container.java:2297)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
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:74)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
at java.awt.EventQueue$4.run(EventQueue.java:733)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
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)

代码如下:

private void jTextField1KeyReleased(java.awt.event.KeyEvent evt) {                                     
    if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
        String displacementString = jTextField1.getText();
        displacement = Double.parseDouble(displacementString);
        System.out.println(displacement);
    }
}                                       

private void jTextField2KeyReleased(java.awt.event.KeyEvent evt) {                                        
    if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
        String initialVelocityString = jTextField1.getText();
        initialVelocity = Double.parseDouble(initialVelocityString);
        System.out.println(initialVelocity);
    }

}                 

我不太确定问题出在哪里。该程序只要求我输入文本框的顺序,我认为这是我编写程序方式的结果。

【问题讨论】:

  • NumberFormatException - 您将非数字值传递给 Double.parseDouble 方法
  • 对输入字段使用正确的验证
  • 您是否尝试了解异常告诉您什么?
  • 更好的方法:new JSpinner(new SpinnerNumberModel(..));

标签: java swing jtextfield numberformatexception


【解决方案1】:

在您的方法jTextField2KeyReleased() 中,您试图将非数值解析为Double 对象-> initialVelocity = Double.parseDouble(initialVelocityString);

您可以使用正则表达式进行适当的验证,或捕捉NumberFormatException 并要求用户提供适当的输入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-12
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 2018-10-19
    相关资源
    最近更新 更多