【发布时间】:2012-10-12 23:40:33
【问题描述】:
我正在尝试为应用程序制作登录屏幕。在登录期间,将对 MySQL 数据库进行许多 SQL 调用,并且可能需要几秒钟来设置所有内容。我想在后台线程运行时通过卡片布局显示状态屏幕并更新 JLabel。
这是我的工作线程的要点:
public class LoginPrepThread extends Thread {
private final UIMain parent;
public LoginPrepThread(UIMain w){
parent = w;
}
public void exec(){
EventQueue.invokeLater(this);
}
public void run(){
try{
//SqlHelper sql = SqlHelper.instance;
sleep(500);
parent.getLoadingLable().setText("Fetching preferences...");
parent.getMainFrame().revalidate();
sleep(500);
parent.getLoadingLable().setText("Scanning workbench...");
parent.getMainFrame().revalidate();
sleep(500);
parent.getLoadingLable().setText("Updating permissions...");
parent.getMainFrame().revalidate();
sleep(500);
parent.getLoadingLable().setText("Finished...Please wait");
parent.getMainFrame().revalidate();
sleep(1000);
parent.getLayout().show(parent.getMainFrame().getContentPane(), "view.main");
}catch(Exception e){
}
}
}
我是这样称呼它的(在 JButton 事件中,经过身份验证后):
setActiveProfile(user);
layout.show(frame.getContentPane(), "view.loading");
frame.repaint();
LoginPrepThread pt = new LoginPrepThread(thisTrick);
pt.exec();
我现在放入了一些虚拟事件,但状态标签没有改变...有什么建议吗?
【问题讨论】:
-
很高兴你知道了。另一个观察:在您的示例中,您正在创建一个线程,但您从未启动它(您将它纯粹用作 Runnable),因此您永远不会让后台线程运行,这是问题的一部分。
标签: java multithreading swing swingworker event-dispatch-thread