我有一个需要通过GUI调用的大程序。 GUI有一个进度条,需要在用户按下开始按钮后更新(如5%.... 10%)。 问题是执行的后台任务没有固定的执行时间。所以在某种程度上可以测量在doInBackground()方法中执行的任务的进度(我正在尝试使用SwingWorker)。或者我应该选择一个不确定的进度条。 我无法清楚地理解Oracle教程页面上提供的示例,并且无法找到解释如何使用进度条的体面页面。 任何帮助将受到高度赞赏。
答案 0 :(得分:1)
根据问题,我会使用无限进度条
public class Indeterminate extends JProgressBar {
private static final long serialVersionUID = -281761375041347893L;
/***
* initial the ProgressBar
*/
public IndeterminateProgressBar() {
super();
setIndeterminate(true);
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
setVisible(false);
}
});
}
/**
* call this, if you start a long action
*/
public void start() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
setVisible(true);
}
});
}
/**
* if you have finished, call this
*/
public void end() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
setVisible(false);
}
});
}
}
像这样使用:
ActionListener startButtonListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new Thread(new Runnable() {
@Override
public void run() {
try {
progressBar.start();
// long operation
} catch (Exception e) {
// handle excpetion
} finally {
progressBar.end();
}
}
}).start();
}
};