使用SwingWorker在后台执行复杂的任务

我有登录界面的GUI。 每当我按下登录按钮时,都会检查用户名和密码以防在在线mysql数据库中输入,我在登录按钮的actionPerformed()方法中从数据库中提取所有这些信息。问题是当程序从数据库中获取数据时GUI冻结。我搜索了我的问题,发现我应该使用SwingWorker,但作为一个新手我没有得到如何使用SwingWorker为我的目的。

首先,在类中声明一个类型为SwingWorker的成员变量(可能在您的GUI类中),如下所示:

 private SwingWorker backgroundProcess; 

然后在初始化代码(构造函数,onShow方法事件处理程序等)中初始化变量,如下所示:

  backgroundProcess = new SwingWorker() { @Override protected Boolean doInBackground() throws Exception { // paste the MySQL code stuff here } @Override protected void done() { // Process ended, mark some ended flag here // or show result dialog, messageBox, etc } }; 

然后,在actionPerfomed方法中,调用SwingWorker的execute方法:

  backgroundProcess.execute(); 

如果操作正确,GUI按钮按下事件后不应该冻结

这个简单的例子 extends SwingWorker来获取带有Void中间结果的Icon 。 同样,您可以扩展SwingWorker以获取DataSource