Java 取消SwingWorker的问题
我正在制作一个备份程序。我有Java 取消SwingWorker的问题,java,swing,backup,swingworker,Java,Swing,Backup,Swingworker,我正在制作一个备份程序。我有SwingWorker做备份,并把它正在做的事情发布到JTextArea。我需要一个按钮来取消worker(一次初始化了未知数量的worker),因此这就是我调用swing workers的方法,以及cancel方法: package main; import java.io.File; import java.util.ArrayList; import javax.swing.SwingWorker; public class test2 { SwingW
SwingWorker
做备份,并把它正在做的事情发布到JTextArea
。我需要一个按钮来取消worker(一次初始化了未知数量的worker),因此这就是我调用swing workers的方法,以及cancel方法:
package main;
import java.io.File;
import java.util.ArrayList;
import javax.swing.SwingWorker;
public class test2 {
SwingWorker bw;
static ArrayList bgWorker = new ArrayList();
ArrayList al = new ArrayList(); // this is the list of files selected
static boolean bwInitiallized = false;
public void startBackup() throws Exception {
Panel.txtArea.append("Starting Backup...\n");
for (int i = 0; i < al.size(); i++) {
/**
* THIS IS WHERE I NEED TO CREATE THE FOLDER THAT EACH BACKUP FILE
* WILL GO INTO EX: SC2 GOES INTO A FOLDER CALLED SC2 AND RIOT GOES
* TO RIOT, ALL WITHIN THE DIRECTORY CHOSEN
*/
File file = new File((String) al.get(i));
File directory = new File(dir); // dir is gotten by a JFileChooser.
bw = new BackgroundWorker(Panel.txtArea, file, directory);
bgWorker.add(bw);
bwInitiallized = true;
bw.execute();
/**
* follows to the bottom of the txtarea
*/
int x;
Panel.txtArea.selectAll();
x = Panel.txtArea.getSelectionEnd();
Panel.txtArea.select(1, x);
}
}
public static void cancel() {
BackgroundWorker bg;
if (bwInitiallized) {
bwInitiallized = false;
Panel.txtArea.append("Cancelling...\n");
for (int i = 0; i < bgWorker.size(); i++) {
bg = (BackgroundWorker) bgWorker.get(i);
bg.cancel(true);
}
Panel.txtArea.append("Canceled backUp!\n");
} else {
Panel.txtArea.append("Cannot Cancel! Not Initiallized!\n");
}
}
}
它不做我认为它做的,但idk。我做错了什么?提前谢谢 我会为每个文件创建一个
class FileWorker extensed SwingWorker
实例,并创建一个class Supervisor extensed SwingWorker
实例来管理它们,如本文所建议。您可以允许用户取消单个文件工作者
或让主管
将其全部取消。下面显示了使用cancel()
的示例
在任何情况下,为了安全起见,请使用适当的
SwingWorker
类型参数,并按照@Hovercraft的评论中的建议严格检查您的设计。我会为每个文件创建一个类FileWorker Extendes SwingWorker
实例,并创建一个类主管Extendes SwingWorker
实例来管理它们,正如本文所建议的那样。您可以允许用户取消单个文件工作者
或让主管
将其全部取消。下面显示了使用cancel()
的示例
在任何情况下,为了安全起见,请使用适当的
SwingWorker
类型参数,并按照@Hovercraft评论中的建议严格检查您的设计。请改进您的Java标识符命名,使其符合标准。我们很难理解别人的代码,他们不必让我们更难理解。还要考虑创建和发布一个。你在这方面的努力将不胜感激;也许可以。Panel是一个具有静态字段的类吗?如果是的话,我不知道你的意思。。。记住,我还是有点noob@wbAnon:另请参见。请改进Java标识符命名,使其符合标准。我们很难理解别人的代码,他们不必让我们更难理解。还要考虑创建和发布一个。你在这方面的努力将不胜感激;也许可以。Panel是一个具有静态字段的类吗?如果是的话,我不知道你的意思。。。记住,我还是有点noob@wbAnon:另见。
bg = (BackgroundWorker) bgWorker.get(i);
bg.cancel(true);