Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 取消SwingWorker的问题_Java_Swing_Backup_Swingworker - Fatal编程技术网

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);