я попытался простой код для сканирования всех файлов из каталога с рекурсивным с SwingWorker но, кажется, выходные не было так хорошо здесь кодJava SwingWorker не работает должным образом, публиковать, но привычка процесс
public class BackupBackgroundProcess extends SwingWorker<Object, String> {
public BackupBackgroundProcess() {
}
@Override
protected void process(List<String> list) {
System.out.println("PROCESSING FILE = "+list.get(0));
}
@Override
protected void done() {
}
@Override
protected FileStatus doInBackground() throws Exception {
System.out.println("OK");
File[] root;
root = new File("/home/hilman/Pictures/err").listFiles();
for (File file : root) {
seekFiles(file, this);
}
return null;
}
private void seekFiles(File f, SwingWorker thread) {
if(f.isDirectory()){
File[] listedFiles = f.listFiles();
for (int i = 0; i < listedFiles.length; i++) {
File file = listedFiles[i];
seekFiles(file, thread);
}
} else {
System.out.println(" PUBLISHING FILE "+f.getAbsolutePath());
publish(f.getAbsolutePath());
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new BackupBackgroundProcess().execute();
}
});
}
}
Выход ожидание
OK
PUBLISHING FILE /home/hilman/Pictures/err/_1427612060421_1.userfile
PUBLISHING FILE /home/hilman/Pictures/err/pic2.png
PUBLISHING FILE /home/hilman/Pictures/err/pic1.png
PUBLISHING FILE /home/hilman/Pictures/err/1.png
PROCESSING FILE = /home/hilman/Pictures/err/_1427612060421_1.userfile
PROCESSING FILE = /home/hilman/Pictures/err/pic2.png
PROCESSING FILE = /home/hilman/Pictures/err/pic1.png
PROCESSING FILE = /home/hilman/Pictures/err/1.ong
но мне кажется, что только появляются
OK
PUBLISHING FILE /home/hilman/Pictures/err/_1427612060421_1.userfile
PUBLISHING FILE /home/hilman/Pictures/err/pic2.png
PUBLISHING FILE /home/hilman/Pictures/err/pic1.png
PUBLISHING FILE /home/hilman/Pictures/err/1.png
PROCESSING FILE = /home/hilman/Pictures/err/_1427612060421_1.userfile
является swingworker doInBackground end независимо от того, что процесс не выполняется? Почему он не работает должным образом?
Да, это, вероятно, потому, что у него не хватает времени, чтобы между вызовами «публиковать» обрабатывать очередь «publish». Попытка добавить что-то вроде 'Thread.yield' или' Thread.sleep' после каждого вызова 'seek' – MadProgrammer
duh, можете ли вы сказать мне, какой метод я должен поставить Thread.sleep или Thread.yield? – user965347
* «... после каждого вызова искать» * как идея;) – MadProgrammer