java.lang.NumberFormatException:empty String

下面的代码不断给出java.lang.NumberFormatException: empty String

 private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) { double AText = Double.parseDouble(angleAField.getText()); double BText = Double.parseDouble(angleBField.getText()); double CText = Double.parseDouble(angleCField.getText()); double aText = Double.parseDouble(sideaField.getText()); double bText = Double.parseDouble(sidebField.getText()); double cText = Double.parseDouble(sidecField.getText()); if (getMissing(angleAField.getText()) == false && getMissing(angleCField.getText()) == false) { //doesnt have angle C ,find Angle A double angleA = Math.round(Math.asin((Math.sin(BText) / bText) * aText)); angleAField.setText("" + angleA); } } public boolean getMissing(String Field) { try { if (Field.equals("")) { return false; // has number } } catch (NumberFormatException e) {} return true; } 

错误:

 Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: empty String at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1011) at java.lang.Double.parseDouble(Double.java:540) at sowhatstrig.trigFrame.jButton4ActionPerformed(trigFrame.java:520) at sowhatstrig.trigFrame.access$300(trigFrame.java:20) at sowhatstrig.trigFrame$4.actionPerformed(trigFrame.java:353) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) 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:6505) at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) at java.awt.Component.processEvent(Component.java:6270) at java.awt.Container.processEvent(Container.java:2229) at java.awt.Component.dispatchEventImpl(Component.java:4861) at java.awt.Container.dispatchEventImpl(Container.java:2287) at java.awt.Component.dispatchEvent(Component.java:4687) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) at java.awt.Container.dispatchEventImpl(Container.java:2273) at java.awt.Window.dispatchEventImpl(Window.java:2719) at java.awt.Component.dispatchEvent(Component.java:4687) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:723) at java.awt.EventQueue.access$200(EventQueue.java:103) at java.awt.EventQueue$3.run(EventQueue.java:682) at java.awt.EventQueue$3.run(EventQueue.java:680) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) at java.awt.EventQueue$4.run(EventQueue.java:696) at java.awt.EventQueue$4.run(EventQueue.java:694) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:693) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) at java.awt.EventDispatchThread.run(EventDispatchThread.java:91) 

你应该在解析double之前检查你的字段:

 private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) { double AText = ParseDouble(angleAField.getText()); double BText = ParseDouble(angleBField.getText()); double CText = ParseDouble(angleCField.getText()); double aText = ParseDouble(sideaField.getText()); double bText = ParseDouble(sidebField.getText()); double cText = ParseDouble(sidecField.getText()); // other code here same } double ParseDouble(String strNumber) { if (strNumber != null && strNumber.length() > 0) { try { return Double.parseDouble(strNumber); } catch(Exception e) { return -1; // or some value to mark this field is wrong. or make a function validates field first ... } } else return 0; } 

您尝试解析为double的字符串为空。 在尝试进行解析之前,您需要检查getText()方法是否返回非空字符串,因为您无法解析为空字符串的两倍。