Guten Morgen.
Um es kurz zu fassen: Ich weiss nicht, inwiefern man ein SwingWorker Thread "canceln" kann, ohne dass dabei der Prozess selbst nicht mehr weiter geht.
Derzeit kann ich zwar den Thread "stoppen", jedoch wird mir nur der Text aus der done()-Methode angezeigt, und die file paths, die ich mithilfe von Apache FileUtils anzeigen lasse, werden trotzdem angezeigt.
Brauch ich einen zweiten Thread, um den Thread selber zu stoppen? Ich konnte nicht wirklich etwas finden, dass mich bis jetzt weiter gebracht hat. Muss ich checken, ob der Thread "interrupted" wird? Das kam auch z.B. immer wieder vor, als ich nach einer Loesung gesucht habe.
Meine SwingWorker-Klasse:
Die Klasse, in dem sich der Stop-Button befindet:
Derzeit sieht bei mir der Output so aus (der Input, ist ein Pfad):
Die done()-Methode wird also ausgefuehrt, der Thread geht aber weiter, bzw. wird nicht gestoppt.
Um es kurz zu fassen: Ich weiss nicht, inwiefern man ein SwingWorker Thread "canceln" kann, ohne dass dabei der Prozess selbst nicht mehr weiter geht.
Derzeit kann ich zwar den Thread "stoppen", jedoch wird mir nur der Text aus der done()-Methode angezeigt, und die file paths, die ich mithilfe von Apache FileUtils anzeigen lasse, werden trotzdem angezeigt.
Brauch ich einen zweiten Thread, um den Thread selber zu stoppen? Ich konnte nicht wirklich etwas finden, dass mich bis jetzt weiter gebracht hat. Muss ich checken, ob der Thread "interrupted" wird? Das kam auch z.B. immer wieder vor, als ich nach einer Loesung gesucht habe.
Meine SwingWorker-Klasse:
Java:
package main;
import java.io.File;
import java.io.FileInputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.SwingWorker;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.TrueFileFilter;
public class FileHandler extends SwingWorker<Vector, Vector>
{
private String dir;
private DefaultTableModel model = (DefaultTableModel) table1.getModel();
public FileHandler(String dir)
{
this.dir = dir;
}
@Override
protected Vector doInBackground() throws Exception
{
Vector row = new Vector();
while (true)
{
setProgress(0);
SimpleDateFormat sdf = new SimpleDateFormat("M/dd/yy HH:mm:ss");
File directory = new File(dir);
System.out.println("Getting all files in " + directory.getCanonicalPath() + " including those in subdirectories");
List<File> files = (List<File>) FileUtils.listFiles(directory, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
// Get max number of files
int numFiles = files.size();
// Modify progress bar
progressBar.setVisible(true);
progressBar.setMaximum(numFiles);
progressBar.setStringPainted(true);
progressBar.setString("Fetching..");
int fileCount = 0;
// Add progress to progressbar, wait 10 milliseconds.. do again
while (fileCount <= numFiles)
{
progressBar.setIndeterminate(true);
fileCount++;
}
for (File file : files)
{
System.out.println("file: " + file.getCanonicalPath());
// Get file info, file size, file date
// Auskommentiert
// Get file input stream
// Add rows
Vector v = new Vector();
v.add(false);
v.add(fileName);
v.add(fileSize);
v.add(fileDate);
v.add(someOtherItem);
publish(v);
}
return row;
}
}
@Override
protected void process(List<Vector> rowsList)
{
for(Vector a : rowsList)
{
DefaultTableModel tModel = (DefaultTableModel)table1.getModel();
tModel.addRow(a);
}
}
@Override
protected void done()
{
System.out.println("DONE!");
try {
// Wait 1 second to set progressbar to invisible
Thread.sleep(1000);
progressBar.setVisible(false);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}
Java:
stopButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
a.cancel(true);
}
});
Code:
Getting all files in D:\Music Import (C Drive)\Electronic\Daft Punk - Random Access Memories (2013) including those in subdirectories
file: D:\Music Import (C Drive)\Electronic\Daft Punk - Random Access Memories (2013)\01 Give Life Back to Music.m4a
file: D:\Music Import (C Drive)\Electronic\Daft Punk - Random Access Memories (2013)\02 The Game of Love.m4a
file: D:\Music Import (C Drive)\Electronic\Daft Punk - Random Access Memories (2013)\03 Giorgio by Moroder (www.LoMasRankiaO.com).m4a
file: D:\Music Import (C Drive)\Electronic\Daft Punk - Random Access Memories (2013)\04 Within.m4a
file: D:\Music Import (C Drive)\Electronic\Daft Punk - Random Access Memories (2013)\05 Instant Crush (feat. Julian Casablancas).m4a
file: D:\Music Import (C Drive)\Electronic\Daft Punk - Random Access Memories (2013)\06 Lose Yourself to Dance (feat. Pharrell Williams).m4a
file: D:\Music Import (C Drive)\Electronic\Daft Punk - Random Access Memories (2013)\07 Touch (feat. Paul Williams).m4a
file: D:\Music Import (C Drive)\Electronic\Daft Punk - Random Access Memories (2013)\08 Get Lucky (feat. Pharrell Williams).m4a
file: D:\Music Import (C Drive)\Electronic\Daft Punk - Random Access Memories (2013)\09 Beyond.m4a
file: D:\Music Import (C Drive)\Electronic\Daft Punk - Random Access Memories (2013)\10 Motherboard.m4a
file: D:\Music Import (C Drive)\Electronic\Daft Punk - Random Access Memories (2013)\11 Fragments of Time (feat. Todd Edwards).m4a
file: D:\Music Import (C Drive)\Electronic\Daft Punk - Random Access Memories (2013)\12 Doin' It Right (feat. Panda Bear).m4a
file: D:\Music Import (C Drive)\Electronic\Daft Punk - Random Access Memories (2013)\13 Contact.m4a
DONE!
file: D:\Music Import (C Drive)\Electronic\Daft Punk - Random Access Memories (2013)\AlbumArtSmall.jpg
file: D:\Music Import (C Drive)\Electronic\Daft Punk - Random Access Memories (2013)\AlbumArt_{DA3B7FE9-7348-48C6-8EF4-4AB48C07A8ED}_Large.jpg
file: D:\Music Import (C Drive)\Electronic\Daft Punk - Random Access Memories (2013)\AlbumArt_{DA3B7FE9-7348-48C6-8EF4-4AB48C07A8ED}_Small.jpg
file: D:\Music Import (C Drive)\Electronic\Daft Punk - Random Access Memories (2013)\Cover.jpg
file: D:\Music Import (C Drive)\Electronic\Daft Punk - Random Access Memories (2013)\desktop.ini
file: D:\Music Import (C Drive)\Electronic\Daft Punk - Random Access Memories (2013)\Folder.jpg