Mih*_*vic 2 java swing progress swingworker jprogressbar
如果我在doInBackground()中有一个属于其他类的方法,是否可以根据外部类的其他方法中发生的更改来设置setProgess()?
你说:
但是当我将setProgess()放在另一个类的方法中时,它告诉我需要创建该方法.
这与SwingWorker无关,而与基本Java无关.没有类可以在类的有效实例上调用另一个类实例(非静态)方法.要使代码setProgress(...)生效,"其他"方法必须调用SwingWorker的实例,因此必须将SwingWorker的引用传递给其他类.因此,将SwingWorker(this在SwingWorker中)传递到另一个类中,然后您可以愉快地调用其方法.同样,这与线程,Swing或SwingWorkers无关,而是基本的面包和黄油Java.
编辑:由于setProgress受保护且是最终版,因此您的SwingWorker必须具有另一个类可以调用的公共方法,并且在此方法中,SwingWorker将需要调用自己的setProgress(...)方法.
例如,
MyWorker类
public class MyWorker extends SwingWorker<Integer, Integer> {
private OtherClass otherClass;
public MyWorker() {
otherClass = new OtherClass(this);
}
@Override
protected Integer doInBackground() throws Exception {
otherClass.otherMethod();
return null;
}
// public method that exposes setProgress
public void publicSetProgress(int prog) {
setProgress(prog);
}
}
Run Code Online (Sandbox Code Playgroud)
OtherClass:
class OtherClass {
MyWorker myWorker;
public OtherClass(MyWorker myWorker) {
this.myWorker = myWorker;
}
public void otherMethod() {
for (int i = 0; i < 100; i++) {
myWorker.publicSetProgress(i);
try {
Thread.sleep(200);
} catch (InterruptedException e) {}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1583 次 |
| 最近记录: |