I've made a small UI on Netbeans, and have am implementing the code in a seperate class (Action Listeners etc.) I am trying to refresh the JTable with data stored in a MySql database, however I am getting this error when running the main class, the problem is not with the JDBC connection, that's working fine, however it is not printing the data to the JTable.
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.Hashtable$Enumerator.next(Hashtable.java:1031)
at com.sun.java.swing.plaf.nimbus.NimbusStyle.compileDefaults(NimbusStyle.java:378)
at com.sun.java.swing.plaf.nimbus.NimbusStyle.validate(NimbusStyle.java:297)
at com.sun.java.swing.plaf.nimbus.NimbusStyle.getValues(NimbusStyle.java:927)
at com.sun.java.swing.plaf.nimbus.NimbusStyle.getInsets(NimbusStyle.java:605)
at javax.swing.plaf.synth.SynthStyle.installDefaults(SynthStyle.java:896)
at javax.swing.plaf.synth.SynthLookAndFeel.updateStyle(SynthLookAndFeel.java:275)
at javax.swing.plaf.synth.SynthLabelUI.updateStyle(SynthLabelUI.java:53)
at javax.swing.plaf.synth.SynthLabelUI.installDefaults(SynthLabelUI.java:48)
at javax.swing.plaf.basic.BasicLabelUI.installUI(BasicLabelUI.java:307)
at javax.swing.JComponent.setUI(JComponent.java:662)
at javax.swing.JLabel.setUI(JLabel.java:242)
at javax.swing.JLabel.updateUI(JLabel.java:256)
at javax.swing.table.DefaultTableCellRenderer.updateUI(DefaultTableCellRenderer.java:144)
at javax.swing.JLabel.<init>(JLabel.java:145)
at javax.swing.JLabel.<init>(JLabel.java:216)
at javax.swing.table.DefaultTableCellRenderer.<init>(DefaultTableCellRenderer.java:94)
at sun.swing.table.DefaultTableCellHeaderRenderer.<init>(DefaultTableCellHeaderRenderer.java:32)
at javax.swing.table.JTableHeader.createDefaultRenderer(JTableHeader.java:610)
at javax.swing.table.JTableHeader.initializeLocalVars(JTableHeader.java:632)
at javax.swing.table.JTableHeader.<init>(JTableHeader.java:138)
at javax.swing.JTable.createDefaultTableHeader(JTable.java:5586)
at javax.swing.JTable.initializeLocalVars(JTable.java:5520)
at javax.swing.JTable.<init>(JTable.java:614)
at javax.swing.JTable.<init>(JTable.java:540)
at AddressBookGui.initComponents(AddressBookGui.java:29)
at AddressBookGui.<init>(AddressBookGui.java:16)
at AddressBookImpl.refreshTable(AddressBookImpl.java:33)
at AddressBookImpl.startGUI(AddressBookImpl.java:26)
at AddressBookImpl.main(AddressBookImpl.java:16)
Edit: Yeah sorry here is the code that's calling it, the actual GUI class is a generated one from Netbeans and I haven't touched it, so unless it's really necessary I'm not going to post that monster.
public class AddressBookImpl extends AddressBookGui implements ActionListener {
public static void main(String[] args) {
AddressBookImpl impl = new AddressBookImpl();
impl.startGUI();
impl.listeners();
}
public void startGUI(){
AddressBookGui gui = new AddressBookGui();
gui.main(null);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
this.setResizable(true);
this.setTitle("Address Book");
refreshTable();
}
@SuppressWarnings({ "rawtypes", "unchecked" })
public DefaultTableModel refreshTable() {
AddressBookGui gui = new AddressBookGui();
try{
DatabaseImpl dbi = new DatabaseImpl();
dbi.refreshDatabase();
DefaultTableModel defaultTableModel = new DefaultTableModel();
ResultSetMetaData md = dbi.refreshResult.getMetaData();
int columnCount = md.getColumnCount();
while(dbi.refreshResult.next())
{
Object [] rowData = new Object [columnCount];
for (int i = 0; i < columnCount; i++)
{
rowData[i] = dbi.refreshResult.getObject(i+1);
}
((DefaultTableModel) gui.mainTable.getModel()).insertRow(dbi.refreshResult.getRow() -1, rowData);
}
defaultTableModel.fireTableDataChanged();
return defaultTableModel;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}