如何从另一个线程更新 JProgressBar.setValue(int) ?
我的第二个目标是用尽可能少的课程来完成它。
这是我现在的代码:
// Part of the main class....
pp.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent event){
new Thread(new Task(sd.getValue())).start();
}
});
public class Task implements Runnable {
int val;
public Task(int value){
this.val = value;
}
@Override
public void run() {
for (int i = 0; i <= value; i++){ // Progressively increment variable i
pbar.setValue(i); // Set value
pbar.repaint(); // Refresh graphics
try{Thread.sleep(50);} // Sleep 50 milliseconds
catch (InterruptedException err){}
}
}
}
pp 是一个 JButton,单击 JButton 时启动新线程。
pbar 是 Main 类中的 JProgressBar 对象。
我怎样才能更新它的值?(进度)
上面 run() 中的代码看不到 pbar。
始终遵守挥杆规则
一旦实现了 Swing 组件,所有可能影响或依赖于该组件状态的代码都应该在事件分派线程中执行。
您可以做的是创建一个观察者来更新您的进度条 - 例如
- 在这种情况下,您希望显示单击按钮时加载数据的进度。DemoHelper
类工具Observable
并在加载一定百分比的数据时向所有观察者发送更新。
进度条更新通过public void update(Observable o, Object arg) {
class PopulateAction implements ActionListener, Observer {
JTable tableToRefresh;
JProgressBar progressBar;
JButton sourceButton;
DemoHelper helper;
public PopulateAction(JTable tableToRefresh, JProgressBar progressBarToUpdate) {
this.tableToRefresh = tableToRefresh;
this.progressBar = progressBarToUpdate;
}
public void actionPerformed(ActionEvent e) {
helper = DemoHelper.getDemoHelper();
helper.addObserver(this);
sourceButton = ((JButton) e.getSource());
sourceButton.setEnabled(false);
helper.insertData();
}
public void update(Observable o, Object arg) {
progressBar.setValue(helper.getPercentage());
}
}
无耻插件:这是来自来源来自我的演示项目 http://code.google.com/p/hb-search-demo/source/browse/trunk/src/main/java/org/demo/ui/DemoUI.java欢迎浏览了解更多详情。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)