nullError
Exception in thread "main" java.lang.NullPointerException
at Student.SQLFrame.getObject(SQLFrame.java:255)
at Student.SQLFrame.setTable(SQLFrame.java:287)
at Student.SQLFrame.init(SQLFrame.java:226)
at Student.SQLFrame.(SQLFrame.java:215)
at Student.SQLFrame.main(SQLFrame.java:340)
package Student;
import java.awt.BorderLayout;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.table.TableModel;
import Student.Student;
import Student.SQLTool;
public class SQLFrame extends JFrame implements ActionListener {
private JTable mainTab;// 显示学生记录的table
private JButton allBtn;// 显示所有学生记/录
private JButton addBtn;// 添加新的学生记录
private JButton findBtn;// 根据姓名查询学生记录
private JButton delBtn;// 根据学号删除学生记录
private SQLTool tool;// 数据库操作类实例
private String[] tableName = { "学号", "姓名", "性别", "成绩", "备注" };
private int width[] = { 70, 60, 50, 80, 50, 140 };
public SQLFrame() {
this.setVisible(true);
this.setTitle("SimpleSMS");
this.setSize(500, 570);
this.setResizable(false);// 设置窗口大小固定
this.setLocationRelativeTo(null);// 设置窗口居中
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
this.init();
initLayout();
}
private void init() {// 组件初始化方法
tool = new SQLTool();
ArrayList<Student> stuList = tool.selectAll();
mainTab = new JTable();
setTable(stuList);
mainTab.getTableHeader().setReorderingAllowed(false);// 设置Table列不可拖动
mainTab.setEnabled(false);// 设置Table不可编辑
allBtn = new JButton("所有记录");
addBtn.addActionListener(this);
addBtn = new JButton("添加记录");
addBtn.addActionListener(this);
findBtn = new JButton("查询记录");
findBtn.addActionListener(this);
delBtn = new JButton("删除记录");
delBtn.addActionListener(this);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void initLayout() {
Panel btnPal = new Panel();
btnPal.add(allBtn);
btnPal.add(addBtn);
btnPal.add(findBtn);
btnPal.add(delBtn);
JScrollPane scroll = new JScrollPane(mainTab);
add(scroll, BorderLayout.CENTER);
add(btnPal, BorderLayout.SOUTH);
}
private Object[][] getObject(ArrayList<Student> stuList) {
// 将stuList数组转变为Object的二维数组用于插入JTable
Object[][] objects = new Object[stuList.size()][6];
for (int i = 0; i < stuList.size(); i++) {
for (int j = 0; j < 6; j++) {
switch (j) {
case 0:
objects[i][j] = stuList.get(i).getID();
break;
case 1:
objects[i][j] = stuList.get(i).getName();
break;
case 2:
objects[i][j] = stuList.get(i).getSex();
break;
case 3:
objects[i][j] = stuList.get(i).getClassStr();
break;
case 4:
objects[i][j] = stuList.get(i).getScore();
break;
case 5:
objects[i][j] = stuList.get(i).getRemarks();
break;
default:
break;
}
}
}
return objects;
}
private void setTable(ArrayList<Student> stuList) {// 更新Table数据
Object[][] objects = getObject(stuList);
DefaultTableModel model = new DefaultTableModel(objects, tableName);
mainTab.setModel(model);
for (int i = 0; i < 6; i++) {
mainTab.getColumnModel().getColumn(i).setPreferredWidth(width[i]);
}
}
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(allBtn)) {
// 显示所有学生信息
setTable(tool.selectAll());// 查询所有学生信息,并在Table中显示出来
} else if (e.getSource().equals(addBtn)) {
// 添加新的学生记录
InsertDialog insertDialog = new InsertDialog();// 自定义输入学生信息的对话框
// showInsertDialog方法显示对话框,并将输入的学生信息返回
Student stu = insertDialog.showInsertDialog();
if (stu != null) {// 判断是否有效
// 调用工具类的insert方法插入新的学生信息,并判断是否成功
if (tool.insert(stu)) {
setTable(tool.selectAll());
} else {
JOptionPane.showMessageDialog(null, "数据添加失败!");
}
}
} else if (e.getSource().equals(findBtn)) {
// 通过姓名查询学生记录
// 弹出对话框让用户输入学生姓名
String nameStr = JOptionPane.showInputDialog("请输入查询学生的姓名:");
ArrayList<Student> stuList = tool.selectByName(nameStr);
// 根据学生姓名查询学生记录,并将查询到的学生记录显示到Table中
setTable(stuList);
} else {
// 通过学号删除学生记录
try {
// 若输入的不为纯数字将发生异常,通过显示错误提示解决异常
int id = Integer.parseInt(JOptionPane.showInputDialog("请输入删除学生的学号:"));
// 调用工具类的deleteByID方法删除学生信息,并判断是否成功
if (tool.deleteByID(id)) {
JOptionPane.showMessageDialog(null, id + "删除成功");
setTable(tool.selectAll());
} else {
JOptionPane.showMessageDialog(null, "未找到学号:" + id);
}
} catch (Exception e2) {
JOptionPane.showMessageDialog(null, "学号应为纯数字!");
}
}
}
public static void main(String[] args){
SQLFrame frame = new SQLFrame();
frame.show();
}
}