Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 12 su 12

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da fermat Visualizza il messaggio
    ma il discorso è che se cerco in giro leggo tutti esempi in cui l'update della gui viene fatta nel done(), o nel process().
    Appunto. process e done li puoi ridefinire tu e vengono invocati non da te direttamente ma dal SwingWorker nel contesto del EDT.
    done viene chiamato dopo che doInBackground è terminato. process invece viene invocato quando viene "pubblicato" qualcosa con il publish eseguito da dentro il doInBackground.

    Se hai afferrato, vedi che SwingWorker aiuta nella interazione tra un thread a parte e il EDT, semplicemente andando a incapsulare e nascondere il passaggio di chiamate dal thread al EDT.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  2. #2
    a rieccomi.

    mi sono letto vari esempi online e fatto un pò di cambiamenti.
    questo funziona, ma vorrei capire se va anche bene:
    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<MyTableModel, Object[]>() {
                        @Override
                        protected MyTableModel doInBackground() throws InterruptedException {
                            try {
                                List<Record> list = utils.scanDir(dir.toPath());
                                countFile = list.size();
                                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};
                                    Thread.sleep(200);
                                    publish(row);
                                }
                            } catch (IOException ex) {
                                JOptionPane.showMessageDialog(null, ex.getMessage());
                            }
                            return model;
                        }
    
                        @Override
                        protected void process(List<Object[]> list) {
                            for (Object[] row : list) {
                                model.addRow(row);
                            }
                        }
    
                        @Override
                        public void done() {
                            north.getLabelCount().setText("No. file " + countFile);
                            north.getBtnStop().setEnabled(false);
                            resizeColumnWidth(); // --> FA IL RESIZE DELLA LARGHEZZA DELLE COLONNE, NULLA DI PIÙ
                            bar.setIndeterminate(false);
                            bar.setString("");
                        }
                    };
                    worker.execute();
    può andare??

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.