1

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

4

2 回答 2

3

首先,在你的类中声明一个成员变量(它可以在你的 GUI 类中),类型SwingWorker如下:

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 不应在按钮按下事件后冻结

于 2012-06-29T04:20:59.377 回答
0

这个简单的例子 extends SwingWorker<Icon, Void>来获取一个Icon带有Void中间结果的。同样,您的可能会扩展SwingWorker<DataSource, Void>到获取DataSource.

于 2012-06-29T04:18:30.077 回答