为什么这段代码在Eclipse下运行不出来,没有反应

package day0415;

import java.awt.*;
import javax.swing.*;

public class Dmeo8_6 extends JFrame{
//定义组件
JPanel jp1,jp2,jp3;
JLabel jlb1,jlb2;
JButton jb1,jb2;
JTextField jtf1,jtf2;
JPasswordField jpf1;
public static void main(String[] args) {
// TODO Auto-generated method stub
Dmeo8_6 dmeo=new Dmeo8_6();
}
//构造函数
public Dmeo8_6(){
jp1=new JPanel();
jp2=new JPanel();
jp3=new JPanel();

jlb1=new JLabel("用户名");
jlb2=new JLabel("密码");
jb1=new JButton("登录");
jb2=new JButton("取消");

jtf1=new JTextField(10);
jpf1=new JPasswordField(10);

this.setLayout(new GridLayout(3,1));

//
jp1.add(jlb1);
jp1.add(jtf1);

jp2.add(jlb2);
jp2.add(jtf2);

jp3.add(jb1);
jp3.add(jb2);

this.add(jp1);
this.add(jp2);
this.add(jp3);

this.setBounds(200, 300, 300, 150);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);

}

}

你看看打印的错误啦,要学会自己调试,发现错误

Exception in thread "main" java.lang.NullPointerException
at java.awt.Container.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at com.test.Dmeo8_6.<init>(Dmeo8_6.java:40)
at com.test.Dmeo8_6.main(Dmeo8_6.java:15)
可以看到Dmeo8_6.java:40 jp2.add(jtf2); 这一行报空
仔细看看,发现jtf2未初始化就直接使用了。
所以要在前面初始化:jtf2 = new JTextField(10);
之后就对啦~
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-04-15
jtf2=new JTextField(10);
第2个回答  2014-04-15
构造函数一般都是对组件的声明。对于组件的操作另外写一个方法吧!在主方法里面你知识声明了这个类而已,你觉得会有反应吗?
相似回答