2016-09-24 37 views
1

我是Java的新用戶。我最近在Net beans中開始了我的第一個項目(計算器)。
雖然我正在研究它,但我添加了if條件。
if條件檢查該字段是否爲空。字段驗證不起作用

這是我的代碼:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
    double a, b, c; 
    a = Integer.parseInt(jTextField1.getText()); 
    b = Integer.parseInt(jTextField2.getText()); 
    if(jTextField1.getText().equals("")) { 
     jLabel2.setText("Please enter a number"); 
    } 
    else { 
     c = a + b; 
     jLabel2.setText("" + c); 
    } 
} 

當我點擊空場的按鈕,它給我這樣的錯誤:

run: 
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:504) 
    at java.lang.Integer.parseInt(Integer.java:527) 
    at calc.jButton1ActionPerformed(calc.java:132) 
    at calc.access$000(calc.java:11) 
    at calc$1.actionPerformed(calc.java:53) 
    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:3320) 
    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:735) 
    at java.awt.EventQueue.access$200(EventQueue.java:103) 
    at java.awt.EventQueue$3.run(EventQueue.java:694) 
    at java.awt.EventQueue$3.run(EventQueue.java:692) 
    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:708) 
    at java.awt.EventQueue$4.run(EventQueue.java:706) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:705) 
    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) 

但是,當我改變if(jTextField1.getText().equals(""))if(!jTextField1.getText().equals(""))它工作正常,但當我添加else條件它第一部分(Not ==「」)將正常工作。但第二(其他)會給出錯誤。

請有人告訴我如何解決它?

回答

1

更改您的驗證解析數之前發生:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
    int a, b, c; 
    if(jTextField1.getText().equals("")) { 
     jLabel2.setText("Please enter a number"); 
    } 
    else { 
     a = Integer.parseInt(jTextField1.getText()); 
     b = Integer.parseInt(jTextField2.getText()); 
     c = a + b; 
     jLabel2.setText("" + c); 
    } 
} 

您可能還需要檢查的其他條件,如輸入一個數字。將文本放在那裏也會拋出NumberFormatException異常。我想你的驗證邏輯改變這樣的事情:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
    int a, b, c; 

    try { 
     a = Integer.parseInt(jTextField1.getText()); 
    } catch (NumberFormatException e) { 
     jLabel2.setText("Please enter a number in field1"); 
     return; 
    } 

    try { 
     b = Integer.parseInt(jTextField2.getText()); 
    } catch (NumberFormatException e) { 
     jLabel2.setText("Please enter a number in field2"); 
     return; 
    } 

    c = a + b; 
    jLabel2.setText("" + c); 
} 
+0

感謝兄弟。有效。 – Conor

2

如果沒有數據,那麼jTextField1.getText()會給你一個空字符串(「」)和 Integer.parseInt("")與空字符串會給你NumberFormatException因爲「」不是一個有效的數字。再加上,你應該檢查這兩個數字所以它應該是這樣的

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
    double a, b, c; 
    if (jTextField1.getText().equals("") || jTextField2.getText().equals("")){ 
      jLabel2.setText("Missing Input"); 
    }else{ 
     try{ 
      a = Integer.parseInt(jTextField1.getText()); 
      b = Integer.parseInt(jTextField2.getText()); 
      c = a + b; 
      jLabel2.setText("" + c); 
      }catch(NumberFormatException e){ 
      jLabel2.setText("Enter Valid numbers");    
     } 
    } 
} 

簡單地說你的代碼try所以在情況下,如果任何輸入不是一個有效的號碼,然後控制去catch塊並顯示錯誤

1

你應該用try和catch塊來包圍你的代碼。如果文本字段爲空,則不能將其文本解析爲整數。

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
    int sum = 0; 
    int a, b; 
    try { 
     a = Integer.parseInt(jTextField1.getText()); 
     sum += a; 
    } catch (NumberFormatException e) { 
     System.out.println("Please correct your text field number 1"); 
    }  
    try { 
     b = Integer.parseInt(jTextField2.getText()); 
     sum += b; 
    } catch (NumberFormatException e) { 
     System.out.println("Please correct your text field number 2"); 
    } 
    jLabel.setText("" + sum); 
}