2

バックアップ用に設計されたプログラムを作成しています。私はSwingWorkerバックアップを行い、それが何をしているのかを投稿していJTextAreaます。ワーカーをキャンセルするボタンが必要です (一度に初期化されるワーカーの量は不明です)。これが、swing ワーカーの呼び出しとキャンセル メソッドです。

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。私は何を間違っていますか?前もって感謝します!

4

1 に答える 1

4

この例で提案されているように、class FileWorker extends SwingWorker<File, File>ファイルごとに のインスタンスを作成し、それらを管理するために の単一のインスタンスを作成します。ユーザーが個別にキャンセルできるようにすることも、すべてキャンセルできるようにすることもできます。使用例を以下に示しますclass Supervisor extends SwingWorker<Queue<File>, File>FileWorkerSupervisorcancel()

いずれにせよ、SwingWorker安全のために適切な型パラメーターを使用し、@Hovercraft のコメントで提案されているように、設計を批判的に調べてください。

于 2012-08-28T03:08:56.340 に答える