Я сделал JTable для списка химических веществ в инвентаре, где можно сортировать каждый столбцы, используя следующий код (chemicalTable это имя JTable):NullPointerException в Java TableRowSorter
chemicalTable.setAutoCreateRowSorter(true);
TableRowSorter<TableModel> sorter1
= new TableRowSorter<TableModel>(chemicalTable.getModel());
chemicalTable.setRowSorter(sorter1);
Тогда я использовал jTextfield, чтобы создать поисковый запрос с помощью KeyTyped Listener, чтобы всякий раз, когда пользователь вводит определенный символ, таблица обновляется. И это обычно работает.
Я использовал этот код в keyTypedListener для SearchBox:
DefaultTableModel dm = (DefaultTableModel) chemicalTable.getModel();
str = searchChemicalText.getText();
try {
String url = "jdbc:mysql://localhost/chemical inventory";
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection(url, "root", "");
} catch (Exception e) {
JOptionPane.showMessageDialog(this, "Error Occurred.", "Error", JOptionPane.ERROR_MESSAGE);
}
int ctr = 0;
while (ctr < chemicalTable.getRowCount()) {
chemicalTable.getModel().setValueAt(null, ctr, 0);
chemicalTable.getModel().setValueAt(null, ctr, 1);
chemicalTable.getModel().setValueAt(null, ctr, 2);
ctr++;
}
int count = 0;
try {
Statement stmt = conn.createStatement();
String query = "Select * FROM chemicallist where name_of_reagent like '%" + str + "%'";
ResultSet rs = stmt.executeQuery(query);
if (rs.next()) {
rs = stmt.executeQuery(query);
while (rs.next()) {
String qty = null, qtyunit = null, chemstate = null, reagentName = null;
reagentName = rs.getString("name_of_reagent");
qty = rs.getString("quantity");
qtyunit = rs.getString("quantity_unit");
chemstate = rs.getString("state");
chemicalTable.getModel().setValueAt(reagentName, count, 0);
chemicalTable.getModel().setValueAt(qty + " " + qtyunit, count, 1);
chemicalTable.getModel().setValueAt(chemstate, count, 2);
if (count + 1 > chemicalTable.getRowCount() - 1) {
dm.setRowCount(chemicalTable.getRowCount() + 1);
dm.fireTableRowsInserted(0, 5);
}
count++;
}
}
} catch (Exception e) {
JOptionPane.showMessageDialog(this, "Error Occurred.", "Error", JOptionPane.ERROR_MESSAGE);
}
Моя проблема заключается в: Всякий раз, когда я всервые любые столбцы (col1, col2, или col3) и вставить символ в строку поиска, я получил сообщение об ошибке:
«Исключение произошло во время события диспетчерского java.lang.NullPointerException»
Лучшее название, описывающее резюме вашей проблемы, привлечет больше помощи :) – Bill
Это должно было быть одним из наименее информативных титулов. Затем покажите фактическую строку, которая бросает NPE (NullPointerException). –
Если этот код находится в KeyListener, вы выглядите в беде. Во-первых, я бы не рекомендовал использовать KeyListener с JTextField. Затем вы делаете много длительной обработки в потоке событий Swing, и это приводит к возникновению ошибки потоковой передачи. Если ваш NPE встречается периодически и неожиданно, возможно, это связано с проблемой потоковой передачи. –