import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class WindowsBox extends Frame implements ActionListener{
private Box baseBox,boxV1;
private TextField text1,text2,text3;
private Button plusButton,
     minusButton,
     multiplyButton,
     divideButton;
private Panel p;
WindowsBox(String s){
super(s);
text1=new TextField(12);
text2=new TextField(12);
text3=new TextField(12);
boxV1=Box.createVerticalBox();
boxV1.add(text1);
boxV1.add(Box.createVerticalStrut(8));
boxV1.add(text2);
boxV1.add(Box.createVerticalStrut(8));
boxV1.add(text3);
p=new Panel();
GridLayout g=new GridLayout(2,2);
p.setLayout(g);
p.add(plusButton);
p.add(minusButton);
p.add(multiplyButton);
p.add(divideButton);
plusButton.addActionListener(this);
minusButton.addActionListener(this);
multiplyButton.addActionListener(this);
divideButton.addActionListener(this);
baseBox=Box.createHorizontalBox();
baseBox.add(boxV1);
baseBox.add(Box.createHorizontalStrut(10));
baseBox.add(p);
add(baseBox);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
setLayout(new FlowLayout());
setVisible(true);
setBounds(120,125,250,350);
}
public void actionPerformed(ActionEvent e) {
double a,b,c;
String str1 = null;
a=Double.parseDouble(text1.getText());
b=Double.parseDouble(text2.getText());
c=0;
if(e.getSource()==plusButton)
c=a+b;
else if(e.getSource()==minusButton)
c=a-b;
else if(e.getSource()==multiplyButton)
c=a*b;
else if(e.getSource()==divideButton)
c=a/b;
str1=String.valueOf(c);
text3.setText(str1);

}
}
public class Exer10 {
public static void main(String args[]){
new WindowsBox("计算器");
}
}
编译后出现了下列问题Exception in thread "main" java.lang.NullPointerException
at java.awt.Container.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at WindowsBox.<init>(Exer10.java:26)
at Exer10.main(Exer10.java:69)
菜鸟,不懂原因,求助大神啊!

解决方案 »

  1.   


    private Button plusButton,
      minusButton,
      multiplyButton,
      divideButton;
    你并没有在任何地方将它们实例化,默认值都是null,所以报空指针异常。
    这样:import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;class WindowsBox extends Frame implements ActionListener {
    private Box baseBox, boxV1;
    private TextField text1, text2, text3;
    private Button plusButton, minusButton, multiplyButton, divideButton;
    private Panel p; WindowsBox(String s) {
    super(s);
    plusButton = new Button("加");
    minusButton = new Button("减");
    multiplyButton = new Button("乘");
    divideButton = new Button("除");
    text1 = new TextField(12);
    text2 = new TextField(12);
    text3 = new TextField(12);
    boxV1 = Box.createVerticalBox();
    boxV1.add(text1);
    boxV1.add(Box.createVerticalStrut(8));
    boxV1.add(text2);
    boxV1.add(Box.createVerticalStrut(8));
    boxV1.add(text3);
    p = new Panel();
    GridLayout g = new GridLayout(2, 2);
    p.setLayout(g);
    p.add(plusButton);
    p.add(minusButton);
    p.add(multiplyButton);
    p.add(divideButton);
    plusButton.addActionListener(this);
    minusButton.addActionListener(this);
    multiplyButton.addActionListener(this);
    divideButton.addActionListener(this);
    baseBox = Box.createHorizontalBox();
    baseBox.add(boxV1);
    baseBox.add(Box.createHorizontalStrut(10));
    baseBox.add(p);
    add(baseBox);
    addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    System.exit(0);
    }
    });
    setLayout(new FlowLayout());
    setVisible(true);
    setBounds(120, 125, 250, 350);
    } public void actionPerformed(ActionEvent e) {
    double a, b, c;
    String str1 = null;
    a = Double.parseDouble(text1.getText());
    b = Double.parseDouble(text2.getText());
    c = 0;
    if (e.getSource() == plusButton)
    c = a + b;
    else if (e.getSource() == minusButton)
    c = a - b;
    else if (e.getSource() == multiplyButton)
    c = a * b;
    else if (e.getSource() == divideButton)
    c = a / b;
    str1 = String.valueOf(c);
    text3.setText(str1); }
    }public class Exer10 {
    public static void main(String args[]) {
    new WindowsBox("计算器");
    }
    }17、18、19行。
      

  2.   

    空指针问题,一般出现在变量赋值问题上,就debug调一下 就知道了
      

  3.   

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;@SuppressWarnings("serial")
    class WindowsBox extends Frame implements ActionListener {
    private Box baseBox, boxV1;
    private TextField text1, text2, text3;
    // 这些button 下面构造方法中进行初始化
    private Button plusButton, minusButton, multiplyButton, divideButton;
    private Panel p; WindowsBox(String s) {
    super(s);
    text1 = new TextField(12);
    text2 = new TextField(12);
    text3 = new TextField(12);
    boxV1 = Box.createVerticalBox();
    boxV1.add(text1);
    boxV1.add(Box.createVerticalStrut(8));
    boxV1.add(text2);
    boxV1.add(Box.createVerticalStrut(8));
    boxV1.add(text3);
    p = new Panel();
    GridLayout g = new GridLayout(2, 2);
    p.setLayout(g);
    // button还没初始化,为NullPoint
    // 初始化,添加
    plusButton = new Button("+");
    minusButton = new Button("-");
    multiplyButton = new Button("*");
    divideButton = new Button("/");
    // 添加的代码
    p.add(plusButton);
    p.add(minusButton);
    p.add(multiplyButton);
    p.add(divideButton);
    plusButton.addActionListener(this);
    minusButton.addActionListener(this);
    multiplyButton.addActionListener(this);
    divideButton.addActionListener(this);
    baseBox = Box.createHorizontalBox();
    baseBox.add(boxV1);
    baseBox.add(Box.createHorizontalStrut(10));
    baseBox.add(p);
    add(baseBox);
    addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    System.exit(0);
    }
    });
    setLayout(new FlowLayout());
    setVisible(true);
    setBounds(120, 125, 250, 350);
    } public void actionPerformed(ActionEvent e) {
    double a, b, c;
    String str1 = null;
    a = Double.parseDouble(text1.getText());
    b = Double.parseDouble(text2.getText());
    c = 0;
    if (e.getSource() == plusButton)
    c = a + b;
    else if (e.getSource() == minusButton)
    c = a - b;
    else if (e.getSource() == multiplyButton)
    c = a * b;
    else if (e.getSource() == divideButton)
    c = a / b;
    str1 = String.valueOf(c);
    text3.setText(str1); }
    }public class Main {
    public static void main(String args[]) {
    new WindowsBox("计算器");
    }
    }