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);
}