ok.
se ho capito il ragionamento:
- clicco su un item menu:
-- attivo un button che serve per stoppare l'operazione
-- attivo la jprogressbar
-- lancio il file chooser per scegliere la directory
- scelta la directory:
-- nello SwingWorker lancio la scansione della directory, e riempio l'ArrayList
- quando il worker ha finito:
-- disattivo il button
-- disattivo la progress bar
-- riempio la jtable
(poi gestirò anche il button di stop).
se il filo logico è giusto, mi verrebbe da fare così:
codice:
north.getBtnStop().setEnabled(true);
bar.setIndeterminate(true);
bar.setString("Loading...");
FileChooserOpen fco = new FileChooserOpen();
fco.showOpenDialog(null);
File dir = fco.getDir();
Scan utils = new Scan();
SwingWorker worker = new SwingWorker<Void, Void>() {
@Override
protected Void doInBackground() {
try {
list = utils.scanDir(dir.toPath());
countFile = list.size();
} catch (IOException ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
}
return null;
}
@Override
protected void done() {
System.out.println("OK");
}
};
worker.execute();
if (worker.isDone()) {
for (int i = 0; i < list.size(); i++) {
String n = list.get(i).getNome();
String t = list.get(i).getTipo();
String p = list.get(i).getPath();
Object[] row = {n, t, p};
model.addRow(row);
}
north.getLabelCount().setText("No. file " + countFile);
north.getBtnStop().setEnabled(false);
resizeColumnWidth();
bar.setIndeterminate(false);
bar.setString("");
}
con il problema che l'OK viene stampato.
ma non entra mail nell'if worker.isDone().