Visualizzazione dei risultati da 1 a 4 su 4

Discussione: progressMonitor

  1. #1

    progressMonitor

    Salve a tutti ragazzi, ho uno strano problema con un progetto realizzato con netbeans. Ho la classe principale che richiama l'interfaccia di una seconda classe che mostra dei dati presi dal database. Se uso un progressMonitor in questa seconda classe, non compare nulla, mentre se lo uso nella classe principale viene mostrato correttamente. Sapreste aiutarmi?

    codice:
    ProgressMonitor progressMonitor = new ProgressMonitor(null,
                        "Sto recuperando tutti gli ordini...",
                        "", 0, valori.size()); ...
    ...
    
    progressMonitor.setProgress(i); // i è una variabile che uso in un ciclo for
    OnLine il nuovo sito: www.lasfidacontinua.it

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: progressMonitor

    Originariamente inviato da rob_santini
    Se uso un progressMonitor in questa seconda classe, non compare nulla, mentre se lo uso nella classe principale viene mostrato correttamente.
    La questione è un po' vaga ... nel senso che bisognerebbe vedere più codice.

    Ma posso ipotizzare che siano le "solite" questioni sul threading in Swing. Cioè il classico errore di tenere impegnato il EDT per molto tempo e quindi la interfaccia in quel frangente risulta "congelata".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Ciao e grazie, provo a mettere più codice:
    Main:
    codice:
    public void visualizzaOrdine() throws ParseException {
            //recupero il codice del cliente selezionato
            Runnable visualizza = new Runnable() {
    
                public void run() {
                    if (libriTable.getSelectedRowCount() != 0) {
                        progressBar.setIndeterminate(true);
                        operazione = "cliente";
                        int row = libriTable.getSelectedRow();
                        String cod = (String) libriTable.getValueAt(row, 0);
                        //nomeCliente=libriTable.getValueAt(row, 2)+" "+libriTable.getValueAt(row, 1);
                        codCliente = cod;
                        nomeCliente = getNomeCliente();
                        Database.eseguiAggiornamento("LOCK TABLES `Ordini` WRITE, `SpecOrdini` WRITE");
                        String q = "SELECT * FROM `Ordini` WHERE `ID_Cliente` LIKE '" + cod + "' ORDER BY `ID` ASC";
                        Vector f = Database.eseguiSelectQuery(q);
                        System.out.println("ORDINI per " + cod + ": " + f.size());
                        if (f.size() == 0) {
                            JOptionPane.showMessageDialog(null, "Nessun ordine attivo per il cliente selezionato!", "Errore", JOptionPane.ERROR_MESSAGE);
                            progressBar.setIndeterminate(false);
                        } else {
                            //per ogni ordine, recupero da SPECORDINE i dettagli
                            //costruisco l'array che passerò poi a VisualizzaOrdine
                            //String[][] totLibri = new String[f.size()+1][10];
                            ArrayList<String[]> totLibri = new ArrayList<String[]>();
                            String[][] riassOrdini = new String[f.size()][7];
                            //int countOrdine=0;
                            int totOrdine = 0;
                            progressBar.setIndeterminate(false);
                            ProgressMonitor progressMonitor = new ProgressMonitor(mainPanel,
                                    "Sto recuperando gli ordini del cliente...",
                                    "", 0, f.size());
                            progressMonitor.setMillisToDecideToPopup(0);
                            progressMonitor.setMillisToPopup(0);
    
                            for (int y = 0; y < f.size(); y++) {
                                String[] o = (String[]) f.elementAt(y);
                                q = "SELECT * FROM `SpecOrdini` WHERE `ID_Ordine` LIKE '" + o[1] + "'";
    
                                Vector w = Database.eseguiSelectQuery(q);
                                System.out.println("LIBRI per " + o[1] + ": " + w.size());
                                riassOrdini[y][0] = o[1];//codice ordine
                                riassOrdini[y][1] = o[3];//data dell'ordine
                                riassOrdini[y][2] = "" + w.size();//libri in ordine
                                riassOrdini[y][4] = aggiornaStatoOrdine(o[1], false);//stato dell'ordine
                                riassOrdini[y][5] = o[5];//acconto
                                riassOrdini[y][6] = o[6];//stato acconto
                                double prezzo = 0;
                                for (int u = 0; u < w.size(); u++) {
                                    String[] lib = (String[]) w.elementAt(u);
                                    System.out.println(lib[2] + " - " + lib[3]);
                                    String[] lib2 = new String[11];
                                    lib2[0] = o[1];//codice ordine
                                    lib2[1] = lib[0];//ID
                                    lib2[2] = lib[2];//isbn
                                    lib2[3] = lib[3];//titolo
                                    lib2[4] = lib[4];//autore
                                    lib2[5] = lib[5];//editore
                                    //NumberFormat value2=NumberFormat.getCurrencyInstance(Locale.ITALY);
                                    //Number n=value2.parse(lib[6]);
                                    lib2[6] = lib[6];//prezzo
                                    lib2[7] = lib[7];//stato
                                    lib2[8] = lib[8];//data dell'ultima operazione
                                    lib2[9] = lib[9];//modalità ordine
                                    lib2[10] = lib[10];//quantità libro
                                    totLibri.add(lib2);
                                    NumberFormat value2 = NumberFormat.getCurrencyInstance(Locale.ITALY);
                                    Number n;
                                    try {
                                        n = value2.parse(lib[6]);
                                        prezzo += n.doubleValue();
                                    } catch (ParseException ex) {
                                        Logger.getLogger(OrdineLibroView.class.getName()).log(Level.SEVERE, null, ex);
                                    }
    
                                //countOrdine++;
                                }
                                riassOrdini[y][3] = "" + round(prezzo, 2);//prezzo totale ordine
                                progressMonitor.setProgress(y + 1);
                            }
                            System.out.println("*TOTLibri=" + totLibri.size() + "  - riassOrdine=" + riassOrdini.length);
                            //apro la finestra
                            VisualizzaOrdine vo = new VisualizzaOrdine(null, true);
                            vo.setLocationRelativeTo(mainPanel);
                            vo.popola(totLibri, riassOrdini);
                            vo.setVisible(true);
                            jButton4ActionPerformed(null);
                        }
                        Database.eseguiAggiornamento("UNLOCK TABLES");
                    } else {
                        JOptionPane.showMessageDialog(null, "Selezionare prima un cliente!", "Errore", JOptionPane.WARNING_MESSAGE);
                    }
                }
            };
            new Thread(visualizza).start();
    
        }
    VisualizzaOrdine:
    codice:
    private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:
        //costruisco un array per ogni libro e poi appendo alla lista
        Runnable visualizza = new Runnable() {
    
            public void run() {
                System.out.println("Sto recuperando tutti gli ordini...");
                ArrayList<String[]> libri = new ArrayList<String[]>();
                ProgressMonitor progressMonitor = new ProgressMonitor(null,
                        "Sto recuperando tutti gli ordini...",
                        "", 0, valori.size());
                for (int i = 0; i < valori.size(); i++) {
                    String[] lib = new String[11];
                    lib[0] = valori.get(i)[0];//ID_Ordine
                    lib[1] = valori.get(i)[2];//isbn
                    lib[2] = valori.get(i)[3];//titolo
                    lib[3] = valori.get(i)[4];//autore
                    lib[4] = valori.get(i)[6];//prezzo
                    lib[5] = valori.get(i)[10];//quantità
                    lib[6] = valori.get(i)[7];//stato
                    lib[7] = valori.get(i)[8];//data ultima operazione
                    lib[8] = OrdineLibroView.aggiornaStatoOrdine(lib[0], false);//stato ordine
                    lib[9] = "false";
                    for(int t=0;t<tabRiassOrdini.getRowCount();t++){
                        if(tabRiassOrdini.getValueAt(t, 0).equals(lib[0])){
                            lib[10]=(String) tabRiassOrdini.getValueAt(t, 5);
                            break;
                        }
                    }
                    //lib[10] = OrdineLibroView.getAcconto(lib[0]);//acconto ordine
                    libri.add(lib);
                    progressMonitor.setProgress(i + 1);
                    System.out.println("Progress: "+(i+1));
                }
                System.out.println("FINE");
                try {
                OrdineLibroView.stampaRapportoConsegna(libri, false);                                        
                    } catch (ParseException ex) {
                        System.err.println(ex);
                    }
                }
            };
            try {
                new Thread(visualizza).start();
            } catch (Exception ex) {
                System.out.println(ex);
            }
        }
    Come è ovvio, il main, dove il monitor viene mostrato correttamente, chiama VisualizzaOrdine, dove appunto il progressMonitor non appare.

    Grazie
    OnLine il nuovo sito: www.lasfidacontinua.it

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    No, non è questione di aver tenuto impegnato il EDT, in quanto fai eseguire il codice in un thread separato (questo può comportare altre questioni legate alla sincronizzazione .... ma è tutto un altro discorso...).

    Tieni però presente che il progress monitor ha per default una sua "logica" di attesa prima di decidere se e quando mostrare la dialog. E quel tuo ciclo for, a meno di avere una grande quantità di dati, dubito che duri così tanto da farla aprire. Risultato: la dialog appunto non si apre!

    Mentre nel primo pezzo di codice vedo che usi setMillisToDecideToPopup/setMillisToPopup.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava 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 © 2025 vBulletin Solutions, Inc. All rights reserved.