在我的java类中,我在其构造函数的jtable中填充~10000个值。因此,加载需要时间,应用程序类型会挂起,直到数据加载。我想显示一个带有加载标志的JLabel来显示状态。但问题是装载标志后加载标志也显示出来。请帮帮我。我的代码看起来像这样。
class myClass{
myClass(){
Loading.setVisible(true);
// LOAD ~ 10000 values in the jtable
}
}
答案 0 :(得分:1)
有很多可行的方法可以做到这一点。这是其中之一。
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
@SuppressWarnings("serial")
public class Test extends JPanel {
private JLabel progressLabel = new JLabel("0 %");
private HeavyProcessor heavyProcessor = new HeavyProcessor();
private static class HeavyProcessor extends Thread {
private volatile int currentStatus = 0;
@Override
public void run() {
for (int i = 0; i <= 100; i++) {
currentStatus++;
try {
Thread.currentThread().sleep(1000);
} catch (InterruptedException e) {
}
}
}
public int getStatus() {
return currentStatus;
}
}
public Test() {
this.add(progressLabel);
this.heavyProcessor.start();
new Timer().scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
progressLabel.setText(String.valueOf(heavyProcessor.getStatus()) + " %");
}
});
}
}, 0, 1000);
}
public static void main(String[] args) {
JFrame window = new JFrame("Progressbar");
window.setSize(200, 200);
window.setVisible(true);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.add(new Test());
}
}
在自己的线程中正在进行困难的操作。在计算期间(或其他任何方式),它会更新描述当前状态的内部变量。 GUI的实现包含一个计时器,它定期(每秒)从第二个线程获得有关当前状态的值,然后更新标签。