如果我在 doInBackground() 中有一个属于其他类的方法,是否可以根据外部类的其他方法中发生的变化来设置 setProgess()?
最佳答案
你说:
but when I put setProgess() inside the method of another class it tells me that I need to make that method.
这与 SwingWorker 无关,与基本 Java 相关。如果不在类的有效实例上这样做,任何类都不能调用另一个类实例(非静态)方法。为了让您的代码正常工作,“其他”方法必须在 SwingWorker 的实例上调用 setProgress(...)
,因此您必须将 SwingWorker 的引用传递给其他类。于是把SwingWorker(SwingWorker里面的this
)传给另一个类,就可以愉快的调用它的方法了。同样,这与线程、Swing 或 SwingWorkers 无关,而是基本的面包和黄油 Java。
编辑:因为 setProgress 是 protected 并且是最终的,所以您的 SwingWorker 必须有一个其他类可以调用的公共(public)方法,并且在这个方法中 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);
}
}
其他类:
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) {}
}
}
}
关于java - Progress Bar - 是否可以在 doInBackground() 方法之外使用 Progress Bar 的 setProgess()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13717826/