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