我已经构建了一个连接数据库的桌面应用程序,该功能是add-delete-modify。我把它分成3个JInternalFrame。
现在的问题是,当我执行批量更新以更新> 500个订单时,我的应用程序将挂起,但它正在处理请求。然后我将再次运行此应用程序,所以现在我有2个窗口打开相同的应用程序。完成第一次申请后,我可以再次使用我以前的申请。
现在我的问题是,如何为我的应用程序实现线程,以便我可以在同一个窗口应用程序中运行尽可能多的功能?
答案 0 :(得分:2)
长时间运行的任务(如批量更新)不能在事件调度线程(进行所有GUI操作的线程)中完成,否则,如您所见,GUI会冻结。
使用SwingWorker在后台线程中执行长时间运行的任务。它的javadoc有一个有用的例子,它也在Swing tutorial中描述。
答案 1 :(得分:1)
现在,通过添加[java.util.concurrent.][1]
您需要做的是
对于线程池,您可以使用其中一个
Executors.newFixedThreadPool or Executors.newCachedThreadPool()
答案 2 :(得分:0)
答案 3 :(得分:0)
我只是使用:
new Thread(new Runnable()
{
public void run()
{
//Things to do in new thread...
}
}).start();
或者如果你想经常使用它,你可以创建实现Runnable的类,所以你不必重写run()函数中的所有东西。
答案 4 :(得分:0)
您应该做的是从数据库访问和修改类中分离UI类。然后,您可以从UI中调用以下内容:
new Thread(new Runnable()
{
public void run()
{
//Call database stuff here
}
}).start();
但请注意,同时进行大量数据库操作可能会导致错误,尤其是因为数据库可能会锁定当前正在读取/写入的表。我建议你一次保持一个操作,并使用线程显示一个选框进度条或类似的东西。