I have the following classes
class Parsing
class Parsing {
private ClassWithTable c = new ClassWithTable();
public void doAction(){
parseRowData();
c.initComponents();
}
private void parseRowData(){
Object[][] rowData = new Object[3][2];
for(int i = 0; i < 3; i++){
rowData[i][0] = "A string";
rowData[i][1] = null;
}
c.setRowData(rowData);
}
}
class ClassWithTable
class ClassWithTable {
private JTable table;
private Object[][]rowData;
private final String[] colNames = new String[]{null,null};
public void initComponents() {
table = new JTable(getRowData(),colNames); //in this line I get the exception
System.out.println(table.getValueAt(1, 1));
}
public void setRowData(Object[][]rowData){this.rowData = rowData;}
private Object[][] getRowData(){return this.rowData;}
public JTable getTable(){return table;}
}
class JTableInstantiation
public class JTableInstantiation {
public static void main (String[] af){
ClassWithTable c = new ClassWithTable();
Parsing p = new Parsing();
p.doAction();
}
}
When I run it, I get a java.lang.NullPointerException
. I figured out that the table inside ClassWithTable
cannot be instantiated, despite the fact that rowData
take all right values. Could you please explain to me why is this happening? What am I doing wrong? Thank you in advance.
Exception table:
Exception in thread "main" java.lang.NullPointerException
at javax.swing.JTable$1.getColumnName(JTable.java:685)
at javax.swing.JTable.addColumn(JTable.java:2801)
at javax.swing.JTable.createDefaultColumnsFromModel(JTable.java:1287)
at javax.swing.JTable.tableChanged(JTable.java:4386)
at javax.swing.JTable.setModel(JTable.java:3688)
at javax.swing.JTable.<init>(JTable.java:632)
at javax.swing.JTable.<init>(JTable.java:573)
at javax.swing.JTable.<init>(JTable.java:684)
at drafts.ClassWithTable.initComponents(JTableInstantiation.java:28)
at drafts.Parsing.doAction(JTableInstantiation.java:10)
at drafts.JTableInstantiation.main(JTableInstantiation.java:41)