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)
菜鸟,不懂原因,求助大神啊!
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)
菜鸟,不懂原因,求助大神啊!
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行。
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("计算器");
}
}