Visualizzazione dei risultati da 1 a 10 su 12

Hybrid View

  1. #1
    ok, immaginavo.

    però a questo punto non ho ben capito.
    come si dovrebbe svolgere il tutto?
    seguendo il flusso a livello teorico:
    - clicco su un item menu e lancio il file chooser per scegliere la directory
    - scelta la directory devo:
    -- riempire una lista che riempie il model della jtable
    -- attivare un button che serve per stoppare l'operazione
    -- attivare la jprogressbar
    - finito lo scan (o cliccando sul button) dovrei:
    -- disattivare il button
    -- disattivare la progress bar
    -- avere la jtable bella pronta

    ora, ho capito che dovrei fare l'update della gui nell'EDT, ma non ho capito come.
    perchè se faccio balmante così:
    codice:
                    FileChooserOpen fco = new FileChooserOpen();
                    fco.showOpenDialog(null);
                    File dir = fco.getDir();
                    try {
                        north.getBtnStop().setEnabled(true);
                        bar.setIndeterminate(true);
                        bar.setString("Loading...");
                        Scan utils = new Scan();
                        ArrayList<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};
                            model.addRow(row);
    
                        }
                        north.getLabelCount().setText("No. file " + countFile);
                        north.getBtnStop().setEnabled(false);
                        resizeColumnWidth();
                        bar.setIndeterminate(false);
                        bar.setString("");
                    } catch (IOException ex) {
                        JOptionPane.showMessageDialog(null, ex.getMessage());
                    }
    - la lista viene riempita, e a fine operazione la jtable hai tutti i dati
    - ma l'attivazione / disattivazione del button / progressbar non avviene

  2. #2
    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
    - la lista viene riempita, e a fine operazione la jtable hai tutti i dati
    - ma l'attivazione / disattivazione del button / progressbar non avviene
    Perché ora tutto il tuo codice di scansione del file-system lo stai eseguendo nel contesto del Event Dispatch Thread e quindi lo stai tenendo "impegnato" tu. E siccome c'è un solo thread per la UI (appunto il EDT), o fa una cosa o fa un'altra. Pertanto finché tieni impegnato tu il EDT, il framework non può dispacciare eventi né disegnare i componenti. La tua UI è completamente "congelata" e non responsiva.
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

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.