我有一个登录屏幕的 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   回答