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

时间:2012-06-29 04:05:02

标签: java swingworker

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

2 个答案:

答案 0 :(得分:2)

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

private SwingWorker<Boolean, Void> backgroundProcess;

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

    backgroundProcess = new SwingWorker<Boolean, Void>() {

        @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的执行方法:

    backgroundProcess.execute();

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

答案 1 :(得分:0)

这个简单的example extends SwingWorker<Icon, Void>来获取IconVoid个中间结果。同样,您可以延长SwingWorker<DataSource, Void>以获取DataSource