gpt4 book ai didi

java - 工作线程阻塞 GUI 重绘

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:13:36 25 4
gpt4 key购买 nike

我正在尝试为应用程序制作登录屏幕。在登录期间,将对 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();

我现在放入了一些虚拟事件,但状态标签没有改变...有什么建议吗?

最佳答案

一个简单的 Swing worker 解决了它。我想我的谷歌搜索还不够好

public class LoginPrepThread extends SwingWorker<String,String> {

private final UIMain parent;

public LoginPrepThread(UIMain w){
parent = w;
}

@Override
protected String doInBackground() throws Exception {
try{
publish("Fetching preferences...");
Thread.sleep(1000);
publish("Updating permissions...");
Thread.sleep(1000);
publish("Scanning workbench...");
Thread.sleep(1000);
publish("Finalizing...");
Thread.sleep(2000);
publish("Finished...Please wait");
Thread.sleep(1000);
parent.getLayout().show(parent.getMainFrame().getContentPane(), "view.main");
}catch(Exception e){

}
return null;
}

protected void process(List<String> item) {
parent.getLoadingLable().setText(item.get(0));
}

}

关于java - 工作线程阻塞 GUI 重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12868514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com