我有一个Java进度条,可以完美加载,但是我看不到进程,只能看到结果。 (当酒吧完成装载时) 我想查看进度的每个百分比。当我运行代码时,仅当框架处于100%位置时,框架才会出现,但进度栏不会。问题出在哪里?
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
JFrame f = new JFrame("JProgressBar Sample");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container content = f.getContentPane();
progressBar = new JProgressBar();
progressBar.setStringPainted(true);
Border border = BorderFactory.createTitledBorder("Reading...");
progressBar.setBorder(border);
content.add(progressBar, BorderLayout.CENTER);
f.setSize(300, 100);
f.setVisible(true);
progressBar.setValue(0);
inc(); //fill the bar
//It fills, but I can't se the whole loading...
}
//Here's the filling path
public static void inc(){
int i=0;
try{
while (i<=100){
progressBar.setValue(i+10);
Thread.sleep(1000);
i+=20;
}
}catch(Exception ex){
//nothing
}
}
答案 0 :(得分:0)
在GUI线程中运行很长的过程(例如填充进度栏和休眠几秒钟)时,您的GUI不会更新。
只需出现一个线程即可处理长时间的操作。
在此线程中,将进度条设置为SwingUtilities.invokeLater(new Runnable() {...}
内的所需值。
Runnable r = new Runnable() {
public void run() {
int i=0;
try{
while (i<=100){
final int tmpI = i+10;
SwingUtilities.invokeLater(new Runnable(){
public void run() {
progressBar.setValue(tmpI);
}
});
Thread.sleep(1000);
i += 20;
}
} catch(Exception ex){
//nothing
}
}
};
Thread t = new Thread(r);
t.start();