【问题标题】:java - Progress Bar - Is it possible to use setProgess() of Progress Bar outside the doInBackground() method?java - 进度条 - 是否可以在 doInBackground() 方法之外使用进度条的 setProgess()?
【发布时间】:2012-11-22 23:02:00
【问题描述】:

如果我在 doInBackground() 中有一个属于其他类的方法,是否可以根据外部类的其他方法中发生的更改来设置 setProgess()?

【问题讨论】:

  • “doInBackground() 中的方法”是什么意思?方法不能嵌套其他方法,所以这让我很困惑。你的意思是 doInBackground 正在调用另一个类的方法,那么是的,你可以使用它来设置进度条。当你尝试这个时会发生什么?如果它不起作用,如果我们能够帮助您,您需要告诉我们更多信息。
  • 是的,这就是我的意思,doInBackground 正在调用另一个类的方法。这是一种排序方法,所以我想显示进度,但是当我将 setProgess() 放在另一个类的方法中时,它告诉我需要创建该方法。

标签: java swing progress swingworker jprogressbar


【解决方案1】:

你说:

但是当我将 setProgess() 放在另一个类的方法中时,它告诉我需要创建该方法。

这与 SwingWorker 无关,而与基本 Java 有关。没有类的有效实例,任何类都不能调用另一个类的实例(非静态)方法。为了使您的代码正常工作,“其他”方法必须在 SwingWorker 的实例上调用 setProgress(...),因此您必须将 SwingWorker 的引用传递给该其他类。因此,将 SwingWorker(SwingWorker 内部的this)传递给另一个类,然后您就可以愉快地调用它的方法了。同样,这与线程、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);
   }

}

其他类:

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) {}
      }
   }
}

【讨论】:

    【解决方案2】:

    只要您担心必须更新栏,您可以通过调用适当的方法在任何您可以访问实例的地方 实现它。它不依赖于方法或类。 (对于 Java 中的每个对象都是如此)。

    根据您的评论,您应该将对该栏的引用作为该方法中的参数传递。否则,您将无法访问它。

    【讨论】:

      猜你喜欢
      • 2011-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多