Tyrant of C 2019-06-16 12:40 采纳率: 100%
浏览 536
已采纳

Java 学生信息管理系统 求助 为什么会出现nullerror

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();
}

}

  • 写回答

2条回答 默认 最新

  • threenewbee 2019-06-16 17:24
    关注

    检查下stuList.get(i)是不是有空
    stuList.get(i).某个get方法是不是返回了空

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)