我在Netbeans上製作了一個小UI,並且正在實現一個單獨的類中的代碼(Action Listeners等)我試圖刷新存儲在MySql數據庫中的數據的JTable,但是我在運行主類時出現這個錯誤,問題不在於JDBC連接,這工作正常,但它不會將數據打印到JTable。ConcurrentModificationException Netbeans Gui
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)
編輯:噢,抱歉這裏是調用它的代碼,實際的GUI類是從NetBeans中生成一個和我沒有碰過它,所以除非真的有必要,我不會去張貼那個怪物。
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;
}
首先猜測...訪問EDT之外的Swing組件 – Robin
您應該發佈一些代碼。這就像說房子着火了,但你不提供地址。 – wxyz
首先將你的主要方法封裝在'SwingUtilities#invokeLater'中,這樣我們可以排除第一個明顯的線程問題 – Robin