I am having a GUI of login screen. Whenever i press the login button the user name and password is checked against entry in an online mysql database,i'm extracting all this information from database in actionPerformed() method of the login button.Problem is while program is fetching data from database the GUI freezes.I googled my problem and found that i should use SwingWorker but being a newbie i didn't get how to use SwingWorker for my purpose.
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
First of all, declare a member variable in your class (it could be in your GUI class) of type SwingWorker
like this:
private SwingWorker<Boolean, Void> backgroundProcess;
Then initialize the variable in your initialization code (constructor, onShow method event handler, etc) like this:
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
}
};
Then, in your actionPerfomed
method, call the SwingWorker
's execute method:
backgroundProcess.execute();
If done correctly, the GUI shouldn't freezee after the button press event
回答2:
This simple example extends SwingWorker<Icon, Void>
to fetch an Icon
with Void
intermediate results. Similarly, yours might extend SwingWorker<DataSource, Void>
to fetch a DataSource
.