Java 方法getRowCount()在尝试对Jtable进行排序时返回错误

Java 方法getRowCount()在尝试对Jtable进行排序时返回错误,java,swing,jtable,abstracttablemodel,rowsorter,Java,Swing,Jtable,Abstracttablemodel,Rowsorter,我是JavaSwing的新手,请帮助我。 我有一个简单的应用程序,它接收来自2个JTextfiled name和occulation的数据,并在按下按钮后将它们引入JTable。数据存储在一个列表中,其中包含PersonString名称、字符串占用。 在我尝试使用TableRowSorter对表格进行排序之前,该应用程序运行良好。 我只给你TablePanel和PersonTableModel代码 桌面类 PersonTableModel类 如果激活方法addSorter,为什么在PersonT

我是JavaSwing的新手,请帮助我。 我有一个简单的应用程序,它接收来自2个JTextfiled name和occulation的数据,并在按下按钮后将它们引入JTable。数据存储在一个列表中,其中包含PersonString名称、字符串占用。 在我尝试使用TableRowSorter对表格进行排序之前,该应用程序运行良好。 我只给你TablePanel和PersonTableModel代码

桌面类

PersonTableModel类


如果激活方法addSorter,为什么在PersonTableModel中的方法getRowCount中收到NullPointerException

您已将db初始化为null,因此在getRowCount之前,您必须调用setData并对其进行初始化,否则您将在db.sizeit上获得NUllPointer,如果我让它只列出db,它将不起作用;你从没打过setData。。。在PersonTableModel上,因此NullPointerExceptionchange行private List db=null;to private List db=new ArrayList;谢谢辛哈卡什!它现在可以正常工作了:D
import model.Person;

public class TablePanel extends JPanel {

    private JTable table;
    private PersonTableModel tablemodel;
    private TableListener tableListener;
    private RowSorter<PersonTableModel> sorter;

    public TablePanel(){
        tablemodel = new PersonTableModel();
        table = new JTable(tablemodel);


        //addSorter(); --- > comment this for you to see the problem


        setLayout(new BorderLayout());
        add(new JScrollPane(table),BorderLayout.CENTER);


    }

    private void addSorter() {
        if (tablemodel.getRowCount() != 0){
        sorter = new TableRowSorter<PersonTableModel>(tablemodel);
        table.setRowSorter(sorter);
        refresh();
        }
    }

    public void setData(List<Person> db){
        tablemodel.setData(db);
    }

    public void refresh(){
        tablemodel.fireTableDataChanged();
    }

    public void addTableListener(TableListener tableListener) {
        this.tableListener = tableListener;

    }
}
public class PersonTableModel extends AbstractTableModel {

    private List<Person> db = null;

    private String[] colNames = { "Id", "Name", "Occupation" };

    public void setData(List<Person> db) {
        this.db = db;
    }

    public String getColumnName(int column) {
        return colNames[column];
    }

    public int getRowCount() {
        return db.size();
    }

    @Override
    public int getColumnCount() {
        return 3;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Person person = db.get(rowIndex);

        switch (columnIndex) {
        case 0:
            return person.getId();
        case 1:
            return person.getName();
        case 2:
            return person.getOccupation();
        }
        return null;
    }
}