Java 打开JFrame时出现AWT-EventQueue-0异常
我有两门课:Java 打开JFrame时出现AWT-EventQueue-0异常,java,swing,exception,awt-eventqueue,Java,Swing,Exception,Awt Eventqueue,我有两门课: public class RecordTableGUI2 extends JFrame implements ActionListener { private JButton addButton; JTable table; RecordTableModel2 model2; public RecordTableGUI2() { model2 = new RecordTableModel2(); table =
public class RecordTableGUI2 extends JFrame implements ActionListener {
private JButton addButton;
JTable table;
RecordTableModel2 model2;
public RecordTableGUI2() {
model2 = new RecordTableModel2();
table = new JTable(model2);
...
add(buttonPanel(), BorderLayout.SOUTH);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(700, 550);
setLocation(300, 80);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == addButton) {
this.setVisible(false);
new AddRecord();
}
}
}
我的AddRecord
课程:
public class AddRecord extends javax.swing.JFrame implements ActionListener {
private JButton showGui2Button;
public AddRecord() {
initComponents();
showGui2Button.addActionListener(this);
setLocation(300, 100);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == showGui2Button) {
this.setVisible(false);
new RecordTableGUI2();
}
}
}
我的RecordTableModel2类:
public class RecordTableModel2 extends DefaultTableModel {
static Vector data = new Vector();
static Vector column = new Vector();
Connection con;
Statement statement;
ResultSet result;
String dbUrl = "jdbc:mysql://localhost/mydb";
String query = "Select * from mytable";
public RecordTableModel2() {
super(data, column);
try {
con = DriverManager.getConnection(dbUrl, "root", "2323");
statement = con.createStatement();
result = statement.executeQuery(query);
int c = result.getMetaData().getColumnCount();
for (int i = 1; i <= c; i++) {
column.add(result.getMetaData().getColumnName(i));
System.out.println(result.getMetaData().getColumnName(i));
}
while (result.next()) {
Vector eachRow = new Vector(c);
for (int i = 1; i <= c; i++) {
eachRow.add(result.getString(i));
System.out.println(result.getString(i));
}
data.add(eachRow);
}
} catch (SQLException sqle) {
sqle.printStackTrace();
} finally {
try {
if (con != null) {
con.close();
}
if (statement != null) {
statement.close();
}
} catch (SQLException sqlee) {
sqlee.printStackTrace();
}
}
}
}
用于初始化表模型的所有代码都不应该是其构造函数的一部分。不要创建扩展DefaultTableModel的类,也不要对数据和列使用静态变量:不要让模型的所有实例共享唯一的数据向量和唯一的列向量 将所有这些代码移到一个简单的方法中,该方法在数据和列名就绪后创建模型:
private TableModel createTableModel() {
Vector data = new Vector();
Vector columns = new Vector();
// populate data and columns using JDBC. Use only local variables
return new DefaultTableModel(data, columns);
}
问题在于您没有向我们展示的代码-提供
SSCCE
粘贴完整的堆栈跟踪。并向我们展示在堆栈跟踪中首先出现的方法的代码代码>生成的IDE
方法codes@JBNizet我放了完整的堆栈跟踪。-1,这是第5或第6次(我数不清)关于这个主题的问题。OP仍然发布与数据库相关的代码,他被告知对我们没有用处,因为我们没有访问数据库的权限。OP仍然拒绝发布SSSCE。to OP被告知没有理由扩展DefaultTableModel top,并用数据填充它,并且已经从我的bl中获得了一个指向工作代码的链接og.但是OP仍然在浪费人们的时间。+1,让我们希望OP这次真的听取了这个建议。在过去的几周里,他在关于这个主题的几篇帖子中得到了这个建议。@camickr:的确如此。你的意思是我应该在我的RecordTableGUI2
类中创建你的方法并删除记录吗TableModel2
class?是的。完全删除类记录TableModel2。所以您说我的问题在我的表模型中,而不是在我的initComponents();
,对吗?
private TableModel createTableModel() {
Vector data = new Vector();
Vector columns = new Vector();
// populate data and columns using JDBC. Use only local variables
return new DefaultTableModel(data, columns);
}