2015-05-19 52 views
0

我做一個小的GUI和program.Program工作正常,在空文本字段,但問題是當用戶在文本輸入任何字符串字段中的錯誤發生對於文本字段上的字符串類型,Java修正錯誤?

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "a34dsfsdf" 

如何爲字符串類型或任何字符修正錯誤除了數字

這是我的代碼

private JTextField textfield1; 
private JTextField textfield3; 
private JTextField textfield4; 
private JButton button1; 

public ChildClass(){ 
    super("Frame"); 
    button1 = new JButton(); 
    button1.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       double number1,baseE,sum; 
       String text1=textfield1.getText(); 
       String text3=textfield4.getText(); 

       if(text1.isEmpty() && text3.isEmpty()){ 
        JOptionPane.showMessageDialog(null, "Enter Values In TextField", "Invalid TextFields", JOptionPane.ERROR_MESSAGE); 
        return; 
       }  
       else if(!text3.isEmpty() && !text1.isEmpty()){ 
        number1=Double.parseDouble(text1); 
        baseE=Double.parseDouble(text3); 

        result =number1+basE; 
        textfield3.setText(""+result); 
       } 
      } 
    }); 
+0

'a34dsfsdf'不是一個數字,所以很明顯你會得到一個異常 – Jens

+0

爲你想要存儲數字的文本字段添加一個'DocumentFilter'。 – Blip

+0

請添加完整的堆棧跟蹤。 – Jens

回答

3

的錯誤是因爲你試圖解析字符串作爲雙。

這兩個電話:

number1=Double.parseDouble(text1); 
baseE=Double.parseDouble(text3); 

如果你看看the documentation

的parseDouble可以拋出兩個例外:

  • NullPointerException - 如果字符串爲null
  • NumberFormatException - 如果該字符串不包含可分析的double。

你應該把這些調用放在一個try catch塊中,並捕獲異常並提示用戶輸入錯誤,說他們需要輸入一個有效的數字。

像這樣的東西應該工作:

try{ 
    number1=Double.parseDouble(text1); 
    baseE=Double.parseDouble(text3); 


    result =number1+basE; 
    textfield3.setText(""+result); 

}catch(NumberFormatException e){ 
    JOptionPane.showMessageDialog(null, "Enter Valid Numbers In TextField", "Invalid TextFields", JOptionPane.ERROR_MESSAGE); 
} 
+0

'NumberFormatException'或'NullPointerException'是一個運行時異常,不需要將其作爲'try-catch'塊。 – Blip

+0

@Peter Szeto謝謝我通過異常處理完成了 –

+0

如果你能提示用戶在輸入數字時輸入一個正確的數字,而不是在他按下按鈕來計算後輸入正確的數字, – Blip

1

我建議,你趕在try catch塊例外。

double number1,baseE,sum; 
String text1=textfield1.getText(); 
String text3=textfield4.getText(); 

try 
{ 
    number1=Double.parseDouble(text1); 
    baseE=Double.parseDouble(text3); 
    result=number1+basE; 
    textfield3.setText(""+result); 
}  
catch (Exception e) 
{ 
    JOptionPane.showMessageDialog(null, "Enter Values In TextField", "Invalid TextFields", JOptionPane.ERROR_MESSAGE); 
    return; 
} 

然後你也可以避免測試空的文本字段。空字符串拋出也是一個例外。

相關問題