Java:如何在eventQueue中使用JTableModel

Java:如何在eventQueue中使用JTableModel,java,swing,jtable,eventqueue,awt-eventqueue,Java,Swing,Jtable,Eventqueue,Awt Eventqueue,我有一个扩展AbstractTableModel的类,它从数据库中汇集数据,因为它是一个Swing组件,我在EventQueue中初始化它,问题在于大多数操作,例如获取连接和查询数据库都在EventQueue中运行,因此加载JTable需要时间。有没有办法将这两个进程分开。您可以在与事件队列分开的线程中设置表,如下所示: new Thread() { public void run() { // setup the table } }.start(); 这将导致

我有一个扩展AbstractTableModel的类,它从数据库中汇集数据,因为它是一个Swing组件,我在EventQueue中初始化它,问题在于大多数操作,例如获取连接和查询数据库都在EventQueue中运行,因此加载JTable需要时间。有没有办法将这两个进程分开。

您可以在与事件队列分开的线程中设置表,如下所示:

new Thread() {
    public void run() {
        // setup the table
    }
}.start();

这将导致
run
中的代码在一个新线程中运行,这正是您所需要的。

使用a来执行繁重的后台任务,以避免阻塞EDT。

如果您需要执行耗时的操作,为了防止GUI冻结,您必须在不同于事件调度程序线程的线程中执行该操作。这些线程被调用,有关如何使用它们的示例将在中详细介绍


编辑:我发现了一篇非常好的介绍和示例文章。

不能解决Swing中的并发问题,可以运行线程,并且(必须)包装到invokeLater(Swing GUI方法的输出)中,好吧,但是建立连接需要一段时间,而这不应该发生在EDT中。也许线程中可能会有对
invokeLater
的调用?从JDBC到XxxTableModel(在本例中)的任何内容都必须包装到invokeLater中,否则您必须处理SwingWorkers黑洞,但输出(publish、process、setprocess、done)在EDT上,API为
表格模型勾勒了一个轮廓。挑剔:没有JTableModel;-)好的,,“AbstractTableModel”您可以编辑您的问题:-)