У меня была та же проблема, и причина была именно такой, как указано Avrom. В моем случае getValueAt
был реализован как:
@Override
synchronized public Object getValueAt(int row, int col) {
if (row < m_rows.size()) {
return m_rows.get(row).getValueAt(col);
}
else
{
return ""; // THIS IS THE BUG
}
}
Проблема здесь в том, что если строка не существует, возвращается строка для каждого столбца. Однако некоторые из моих столбцов имеют тип класса Boolean и, следовательно, исключение:
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Boolean
at javax.swing.JTable$BooleanRenderer.getTableCellRendererComponent(JTable.java:5409)
at javax.swing.JTable.prepareRenderer(JTable.java:5736)
Решение было просто изменить возвращаемое значение на:
return null;