gpt4 book ai didi

java - 即使使用 SwingWorker,jLabel 的 setText 也无法工作

转载 作者:行者123 更新时间:2023-12-01 17:21:35 25 4
gpt4 key购买 nike

我正在使 JLabel 显示计时器,因此它每秒更新一次,并且我在线程的帮助下更新它,我正在使用 SwingWorker 来更新 JLabel,但它不起作用。这是我的代码...

long pos=-1;
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

try
{
pos=...value of timer....
jLabel1.setText("in function");
jLabel3.setText("in function");
timer=new Thread(new adsa());
timer.start();

}
catch(Exception e)
{
System.out.println("EXCEPTION CAUGHT");
}
}

/**
*
*/
public void run()
{

try
{

System.out.println(pos);

while(pos!=0 && clip.isRunning())
{
label1.setText(String.valueOf(pos));
System.out.println(pos);
pos--;
timer.sleep(1000);

SwingWorker worker = new SwingWorker() {

@Override
public Object doInBackground(){

try
{
jLabel3.setText(String.valueOf(pos));
jLabel3.setText("ghfdxhc");
label1.setText("hvgjh");
System.out.println("zxc");

return null;
}
catch(Exception e)
{
return null;
}

}
};
worker.execute();
}

}
catch(Exception e)
{
System.out.println("Error in run");
}
}

所有 println 语句都有效,即使是 SwingWorker 内部的 println 语句,但 jLabel 没有更新,两个标签上都显示“in function”并且它没有改变。如果可能的话,请建议替代方法...

最佳答案

对于此类工作,您应该使用 Swing Timer 。 SwingWorker 通常用于繁重的任务,并且不会阻止 gui( Event Dispatch Thread ) 导致在不同线程中运行。

我不确定在 doInBackground() 中更新你的 gui 是否会如你所知,它在另一个线程中运行。确保您可以

1) 将您的调用包装在 SwingUtilities.invokeLater(..)

2) 使用 publish(..) 并在此处更新。

但我建议使用此任务Swing Timer

关于java - 即使使用 SwingWorker,jLabel 的 setText 也无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18408217/

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