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ì:
con il problema che l'OK viene stampato.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(""); }
ma non entra mail nell'if worker.isDone().

Rispondi quotando