java - Progress Bar - 是否可以在 doInBackground() 方法之外使用 Progress Bar 的 setProgess()?

标签 java swing progress swingworker jprogressbar

如果我在 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/

相关文章:

java - 了解 Java 在用作方法参数时如何处理对象

java - 如何从 POJO 类中检索列表

Java:组件在事件发生后消失

java - JTree 难题 : Tree vs. 通过 vector 扩展进行分支

ruby - 使用纯 Ruby 脚本将进度上传到 S3

java - Maven Jar Plugin 和 Maven Assembly Plugin 有什么区别?

java - 如何将 DBUtils 结果集转换为由更多领域对象组合而成的 JavaBeans?

java - 如何通过在java中选择打印机选项使用按钮打印页面

python - PyQt 进度条的忙碌指示

swift - 随着进度将数据插入 Realm 数据库?