2013-03-25 47 views
1

我一直在運行該程序編譯但運行不正常。當我運行它並嘗試執行計算時,它會吐出一堆錯誤。我認爲它必須與變量類型。這裏是程序:線程「AWT-EventQueue-0」中的異常java.lang.NumberFormatException:空字符串

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
public class area extends JFrame implements ActionListener, ItemListener{ 

//row 1 
    JPanel row1 = new JPanel(); 
    JLabel select = new JLabel("Please select what you would like to caculate the area and volume of."); 
//row 2 
    JPanel row2 = new JPanel(); 
    JCheckBox circle = new JCheckBox("Circle", false); 
    JCheckBox cube = new JCheckBox("Cube", false); 
//row 3 
    JPanel row3 = new JPanel(); 
    JLabel radlab = new JLabel("Radius of the circle (in cm)"); 
    JTextField rad = new JTextField(3); 
    JLabel sidelab = new JLabel("A side of the cube (in cm)"); 
    JTextField side = new JTextField(3); 
//row4 
    JPanel row4 = new JPanel(); 
    JButton solve = new JButton("Solve!"); 
//row 5 
    JPanel row5 = new JPanel(); 
    JLabel areacallab = new JLabel("Area"); 
    JTextField areacal = new JTextField(10); 
    JLabel volumelab = new JLabel("Volume"); 
    JTextField volume = new JTextField(10); 
public area(){ 
    setTitle("Area Caculator"); 
    setSize(500,400); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setVisible(true); 
//disables all text areas 
    rad.setEnabled(false); 
    side.setEnabled(false); 
    areacal.setEnabled(false); 
    volume.setEnabled(false); 
//add listeners 
    circle.addItemListener(this); 
    cube.addItemListener(this); 
    solve.addActionListener(this); 
FlowLayout one = new FlowLayout(FlowLayout.CENTER); 
    setLayout(one); 

    row1.add(select); 
    add(row1); 


    row2.add(circle); 
    row2.add(cube); 
    add(row2); 

    row3.add(radlab); 
    row3.add(rad); 
    row3.add(sidelab); 
    row3.add(side); 
    add(row3); 

    row4.add(solve); 
    add(row4); 

    row5.add(areacallab); 
    row5.add(areacal); 
    row5.add(volumelab); 
    row5.add(volume); 
    add(row5); 

} 
public void circlepick(){ 
    //cube.setCurrent(false); 
    cube.setEnabled(false); 
    rad.setEnabled(true); 
} 
public void cubepick(){ 
    circle.setEnabled(false); 
    side.setEnabled(true); 
} 
@Override 
public void itemStateChanged(ItemEvent event) { 
    Object item = event.getItem(); 
    if (item == circle){ 
     circlepick(); 
    } 
    else if (item == cube){ 
     cubepick(); 
    } 
    } 
@Override 
public void actionPerformed(ActionEvent evt){ 
    //String radi = rad.getText(); 
    //String sid = side.getText(); 

    //circlesolve(); 
    //cubesolve(); 
String radi = rad.getText(); 
String sid = side.getText(); 
double radius = Double.parseDouble(radi); 
double length = Double.parseDouble(sid); 

    double cirarea = Math.PI * Math.pow(radius, 2); 
    double cirvolume = (4.0/3) * Math.PI * Math.pow(radius, 3); 
    double cubearea = Math.pow(length, 2); 
    double cubevolume = Math.pow(length, 3); 
    areacal.setText("" + cirarea + cubearea + ""); 
    volume.setText("" + cirvolume + cubevolume + ""); 
} 
public static void main(String[] args) { 
    area are = new area(); 

} 
} 

這裏是錯誤打印出來時,試圖執行數學(抱歉它真的很長)。在sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1038)
空字符串
在java.lang.Double中:

在異常線程 「AWT-EventQueue的-0」 java.lang.NumberFormatException。 parseDouble(Double.java:548)
在area.actionPerformed(area.java:112)
...

在此先感謝這麼多的幫助!

回答

2

當調用功能:

double radius = Double.parseDouble(radi); 
double length = Double.parseDouble(sid); 

要麼radisid是空虛String,那是什麼

java.lang.NumberFormatException: empty String 

告訴你。
您可能會考慮在解析之前添加System.out.println(raid + ", " + sid)以檢查哪些值爲空字符串並確保字符串不爲空。

Double.parseDouble(String s)拋出一個NumberFormatException當給定的String s不能被解析爲double值。

相關問題