ciao!
sto cercando di capire meglio ExecutorService.
quello che vorrei fare è una volta scelta la directory con un JFileChooser:
- avviare la JProgressBar in modalità setIndeterminate
- avviare la procedura di scan della directory che riempie il model della JTable
- aggiungere le righe al model
- lanciare un metodo che mi setta la larghezza delle colonne della JTable
- finita la procedura stoppare la JProgressBar
per ora ho fatto questo:
la JTable viene riempita correttamente, ma la JProgressBar non viene stoppata.codice:FileChooserOpen fco = new FileChooserOpen(); fco.showOpenDialog(null); ExecutorService es = Executors.newSingleThreadExecutor(); es.submit(new Runnable() { @Override public void run() { try { bar.setIndeterminate(true); bar.setString("Loading..."); File dir = fco.getDir(); Scan utils = new Scan(); ArrayList<Record> list = utils.scanDir(dir.toPath()); 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); } resizeColumnWidth(); } catch (IOException ex) { JOptionPane.showMessageDialog(null, ex.getMessage()); } } }); es.shutdown(); bar.setIndeterminate(false); bar.setString("");
inoltre ho questi errori:
dove sto sbagliando??codice:Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at javax.swing.DefaultRowSorter.convertRowIndexToModel(DefaultRowSorter.java:518) at javax.swing.JTable.convertRowIndexToModel(JTable.java:2642) at javax.swing.JTable.getValueAt(JTable.java:2717) at javax.swing.JTable.prepareRenderer(JTable.java:5706) at javax.swing.plaf.synth.SynthTableUI.paintCell(SynthTableUI.java:683) at javax.swing.plaf.synth.SynthTableUI.paintCells(SynthTableUI.java:580) at javax.swing.plaf.synth.SynthTableUI.paint(SynthTableUI.java:364) at javax.swing.plaf.synth.SynthTableUI.update(SynthTableUI.java:275) at javax.swing.JComponent.paintComponent(JComponent.java:780) at javax.swing.JComponent.paint(JComponent.java:1056) at javax.swing.JComponent.paintToOffscreen(JComponent.java:5210) at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:290) at javax.swing.RepaintManager.paint(RepaintManager.java:1272) at javax.swing.JComponent._paintImmediately(JComponent.java:5158) at javax.swing.JComponent.paintImmediately(JComponent.java:4969) at javax.swing.RepaintManager$4.run(RepaintManager.java:831) at javax.swing.RepaintManager$4.run(RepaintManager.java:814) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814) at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:789) at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738) at javax.swing.RepaintManager.access$1200(RepaintManager.java:64) at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1732) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:726) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Rispondi quotando

