使用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
。