我有一个扩展AbstractTableModel的类,它从数据库中汇集数据,因为它是一个Swing组件我在EventQueue中初始化它,问题是大多数操作,如获取连接和查询DB都在事件中运行,因此需要时间加载JTable。有没有办法将这两个过程分开。
答案 0 :(得分:1)
使用SwingWorker执行繁重的后台任务以避免阻止EDT。
答案 1 :(得分:0)
如果您需要执行耗时的操作,为了防止GUI冻结,您必须在与事件调度程序线程不同的线程中执行此操作。这些线程称为Worker threads,有关如何使用它们的示例详见this other question。
编辑:我找到了一篇非常好的介绍和示例文章here。
答案 2 :(得分:-1)
您可以在与事件队列分开的线程中设置表,如下所示:
new Thread() {
public void run() {
// setup the table
}
}.start();
这将导致run
中的代码在新线程中运行,这正是您想要的。