我正在使用登录屏幕的GUI。每当我按下登录按钮时,都会检查用户名和密码以防在在线mysql数据库中输入,我在登录按钮的actionPerformed()方法中从数据库中提取所有这些信息。问题是当程序从中获取数据时数据库GUI冻结。我搜索了我的问题,发现我应该使用SwingWorker,但作为一个新手,我没有得到如何使用SwingWorker为我的目的。
答案 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>
来获取Icon
个Void
个中间结果。同样,您可以延长SwingWorker<DataSource, Void>
以获取DataSource
。