数据模型传递更新JTable出现空指针异常 学生求助

摸摸就好了 2012-11-21 02:13:41
有两个java文件,一个是模型,装了对表的查询操作,import语句都删了,
****************************************StuModel.java******************************************
public class StuModel extends AbstractTableModel{
Vector rowData,columnNames;
Connection con=null;
PreparedStatement ps=null;
ResultSet rs=null;
//做一个构造函数,用于初始化我们的数据模型
public void init(String sql){
if(sql.equals("")){
sql="select *from student";
}
//中间
columnNames=new Vector();//设置列名
columnNames.add("学号");
columnNames.add("名字");
columnNames.add("性别");
columnNames.add("生日");
columnNames.add("地址");
rowData=new Vector();//可以存放多行
try{
Class.forName("com.mysql.jdbc.Driver"); con=DriverManager.getConnection("jdbc:mysql://localhost:3306/example","test1","520999");
System.out.println("连接数据库服务器成功");
ps=con.prepareStatement(sql);
rs=ps.executeQuery();
while(rs.next()){
Vector hang=new Vector();
hang.add(rs.getInt("num"));
hang.add(rs.getString("name"));
hang.add(rs.getString("sex"));
hang.add(rs.getString("birthday"));
hang.add(rs.getString("address"));
rowData.add(hang);
}
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(rs!=null){
rs.close();
rs=null;
}
if(ps!=null){
ps.close();
ps=null;
}
if(con!=null){
con.close();
con=null;
}
} catch(Exception e){
e.printStackTrace();
}
}

}
public void addStu(String sql){
//根据用户输入的sql语句,完成添加任务
}

//通过传递的sql语句来获得数据模型
public StuModel(String sql){
this.init(sql);
}

public StuModel(){
this.init("");
}

//得到共有多少列
public int getColumnCount() {
// TODO Auto-generated method stub
return this.columnNames.size();
}

@Override
public String getColumnName(int column) {
// TODO Auto-generated method stub
return (String)this.columnNames.get(column);
}

//得到共有多少行
public int getRowCount() {
// TODO Auto-generated method stub
return this.rowData.size();
}

//得到某行某列的数据
public Object getValueAt(int row, int column) {
// TODO Auto-generated method stub
return ((Vector)this.rowData.get(row)).get(column);
}

}
*****************************************Test3.java*********************************************
public class Test3 extends JFrame implements ActionListener{
JPanel jp1,jp2;
JLabel jl1;
JButton jb1,jb2,jb3,jb4;
JTable jt;
JScrollPane jsp;
JTextField jtf;
public static void main(String[] args){
Test3 test3=new Test3();
}
//构造函数
public Test3(){
jp1=new JPanel();
jtf=new JTextField(10);
jb1=new JButton("查询");
jb1.addActionListener(this);
jl1=new JLabel("请输入名字");
//把各个控件加入到jp1
jp1.add(jl1);
jp1.add(jtf);
jp1.add(jb1);

jp2=new JPanel();
jb2=new JButton("添加");
jb3=new JButton("修改");
jb4=new JButton("删除");
//把各个控件加入到jp2
jp2.add(jb2);
jp2.add(jb3);
jp2.add(jb4);

//创建一个数据模型对象
StuModel sm=new StuModel();

//初始化JTable
JTable jt=new JTable(sm);
//初始化jsp JScrollPane
jsp=new JScrollPane(jt);
//把jsp放入到JFrame
this.add(jsp);
this.add(jp1,"North");
this.add(jp2,"South");
this.setSize(400,300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public void actionPerformed(ActionEvent arg0){
//判断哪个按钮被点击
if(arg0.getSource()==jb1){
System.out.println("用户希望查询");
//因为把对表的数据封装到StuModel中,我们就可以比较简单的完成查询
String tempname=jtf.getText().trim();
//写一个sql语句
String sql="select *from student Where name='tempname'";
//构建新的数据模型类,并更新
StuModel sm=new StuModel(sql);
//更新JTable
jt.setModel(sm);
}
}
}
********************************************************************************
运行的时候可以运行,但是当输出名字查询的时候就会报错:
java.lang.NullPointerException
at com.test1.Test3.actionPerformed(Test3.java:70) //就是jt.setModel(sm);这句话。
重置JTable的时候为什么会出错啊,,求助求助求助
...全文
190 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
anruike 2012-11-21
  • 打赏
  • 举报
回复
47行,JTable jt = new JTable(sm); 只补始化了一个局部变量, 70行使用的全局jt 没有初始化
摸摸就好了 2012-11-21
  • 打赏
  • 举报
回复
没人么

58,454

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧