gpt4 book ai didi

java - 取消 SwingWorker 的问题

转载 作者:行者123 更新时间:2023-11-30 07:23:13 24 4
gpt4 key购买 nike

我正在制作一个旨在作为备份的程序。我让 SwingWorker 执行备份并将它正在执行的操作发布到 JTextArea。我想要一个按钮来取消 worker ,(一次初始化的数量未知)所以这就是我调用 Swing worker 的方法,以及取消方法:

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

好吧,由于我无法弄清楚的原因,这并没有取消它们中的任何一个(据我所知)。我唯一能想到的就是当我做的时候

bg = (BackgroundWorker) bgWorker.get(i);
bg.cancel(true);

它并没有像我想的那样做,但是 idk。我究竟做错了什么?提前致谢!

最佳答案

我会创建一个 class FileWorker extends SwingWorker<File, File> 的实例对于每个文件和 class Supervisor extends SwingWorker<Queue<File>, File> 的单个实例按照本 example 中的建议管理它们.您可以允许用户取消个人 FileWorker或者让 Supervisor全部取消。使用 cancel() 的示例显示 here .

无论如何,请使用适当的 SwingWorker按照@Hovercraft 评论中的建议,为安全输入参数并严格检查您的设计。

关于java - 取消 SwingWorker 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12152079/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com