import java.awt.*;
import java.awt.event.*;
public class a extends Frame implements ActionListener{
private MenuItem fileNew = new MenuItem("New");
private MenuItem fileOpen = new MenuItem("Open");
private MenuItem fileExit = new MenuItem("Exit");
private MenuItem editCut = new MenuItem("Cut");
private MenuItem editCopy = new MenuItem("Copy");
private MenuItem editPaste = new MenuItem("Paste");
private TextField text1 = new TextField(10);
private Button Add = new Button("+");
private TextField text2 = new TextField(10);
private Button Equal1 = new Button("=");
private TextField text3 = new TextField(10);
private TextField text4 = new TextField(10);
private Button Mul = new Button("*");
private TextField text5 = new TextField(10);
private Button Equal2 = new Button("=");
private TextField text6 =new TextField(10);
public a(){
super("计算器");
Menu file = new Menu("File");
Menu edit = new Menu("Edit");
file.add(fileNew); file.add(fileOpen); file.add(fileExit);
edit.add(editCut); edit.add(editCopy); edit.add(editPaste);
MenuBar bar = new MenuBar();
bar.add(file);
bar.add(edit);
setMenuBar(bar);
setLayout(new FlowLayout());
add(text1);add(Add);add(text2);add(Equal1);add(text3);
add(text4);add(Mul);add(text5);add(Equal2);add(text6);
Equal1.addActionListener(this);
Equal2.addActionListener(this);
setResizable(false);
pack();
setVisible(true);
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent we){
System.exit(0);
}
});
}
public static void main(String[] args){
a jfq = new a();
}
public void actionPerformed(ActionEvent e){
int first1,second1,sum1;
double first2,second2,sum2;
first1 = Integer.parseInt(text1.getText());
second1 = Integer.parseInt(text2.getText());
sum1 = first1+second1;
text3.setText(String.valueOf(sum1));
first2 = Double.parseDouble(text4.getText());
second2 = Double.parseDouble(text5.getText());
sum2 = first2*second2;
text6.setText(String.valueOf(sum2));
}
}
这个程序能运行但为什么在使用是会出错:
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: empty St
ring
        at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:99
4)
        at java.lang.Double.parseDouble(Double.java:510)
        at a.actionPerformed(a.java:55)
        at java.awt.Button.processActionEvent(Button.java:392)
        at java.awt.Button.processEvent(Button.java:360)
        at java.awt.Component.dispatchEventImpl(Component.java:4501)
        at java.awt.Component.dispatchEvent(Component.java:4331)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThre
ad.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.
java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)E:\>
这是怎么回事呀!
如何把加法和乘法放在不同行呀!

解决方案 »

  1.   

    import java.awt.*; 
    import java.awt.event.*; 
    public class a extends Frame implements ActionListener{ 
    private MenuItem fileNew = new MenuItem("New"); 
    private MenuItem fileOpen = new MenuItem("Open"); 
    private MenuItem fileExit = new MenuItem("Exit"); 
    private MenuItem editCut = new MenuItem("Cut"); 
    private MenuItem editCopy = new MenuItem("Copy"); 
    private MenuItem editPaste = new MenuItem("Paste"); 
    private TextField text1 = new TextField(10); 
    private Button Add = new Button("+"); 
    private TextField text2 = new TextField(10); 
    private Button Equal1 = new Button("="); 
    private TextField text3 = new TextField(10); 
    private TextField text4 = new TextField(10); 
    private Button Mul = new Button("*"); 
    private TextField text5 = new TextField(10); 
    private Button Equal2 = new Button("="); 
    private TextField text6 =new TextField(10); 
    public a(){ 
    super("计算器"); 
    Menu file = new Menu("File"); 
    Menu edit = new Menu("Edit"); 
    file.add(fileNew); file.add(fileOpen); file.add(fileExit); 
    edit.add(editCut); edit.add(editCopy); edit.add(editPaste); 
    MenuBar bar = new MenuBar(); 
    bar.add(file); 
    bar.add(edit); 
    setMenuBar(bar); 
    setLayout(new FlowLayout()); 
    add(text1);add(Add);add(text2);add(Equal1);add(text3); 
    add(text4);add(Mul);add(text5);add(Equal2);add(text6); 
    Equal1.addActionListener(this); 
    Equal2.addActionListener(this); 
    setResizable(false); 
    pack(); 
    setVisible(true); 
    this.addWindowListener(new WindowAdapter(){ 
    public void windowClosing(WindowEvent we){ 
    System.exit(0); 

    }); 

    public static void main(String[] args){ 
    a jfq = new a(); 

    public void actionPerformed(ActionEvent e){ 
    int first1,second1,sum1; 
    double first2,second2,sum2; 
    if(e.getSource()==Equal1){
    first1 = Integer.parseInt(text1.getText()); 
    second1 = Integer.parseInt(text2.getText()); 
    sum1 = first1+second1; 
    text3.setText(String.valueOf(sum1)); }
    else if(e.getSource()==Equal2){
    first2 = Double.parseDouble(text4.getText()); 
    second2 = Double.parseDouble(text5.getText()); 
    sum2 = first2*second2; 
    text6.setText(String.valueOf(sum2)); }


    还在研究这个呀,呵呵。
    结帖吧。
      

  2.   

    AWT都是原生的窗口,难能可贵啊
    我建议你为每个按钮添加各自的监听器, 这样就不用判断消息是来自哪个控件的了
      

  3.   

    而且当你输入的是非数字的时候会抛异常, 建议你捕获一下
    first1 = Integer.parseInt(text1.getText());
    second1 = Integer.parseInt(text2.getText()); 
      

  4.   

    因为你的public void actionPerformed(ActionEvent e)捕获的是所有按钮的时间
    当你写好1+2 按下等于的时候  程序会判断你的乘法模块没有输入值 是空的  所以出错了