Nel metodo per l'evento del pulsante non devi fare cose del tipo:Originariamente inviato da Cool81
Vedendo il codice che ho passato prima, mi limito a creare il JFrame ed è così che si avvia il thread o devo scrivere qualcos'altro?
progressBar1.dispose();
setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
Cose di questo tipo per la terminazione dovranno essere fatte solo quando il worker thread è terminato.
Deduco che non hai ancora compreso bene quale è il ciclo di vita di uno SwingWorker.Originariamente inviato da Cool81
Ho implementato questi metodi (done() e doInBackground()) così come riportato anche dal tutorial che mi hai indicato tu, ma, sempre per capire, gli devo richiamare da qualche parte o il thread, quando viene istanziato, li richiama da solo?
1) Si crea una istanza della classe che estende SwingWorker (di seguito "worker").
2) Si invoca execute() sul worker.
3) Il worker crea un nuovo thread nel cui contesto invoca in automatico doInBackground(). Metodo di cui devi fare l'override per eseguire il tuo "lavoro" in background.
4) doInBackground() lavora nel contesto di un altro thread ... non del EDT. Non è "safe" accedere direttamente da qui alla interfaccia utente. Ci sono diversi modi per farlo in modo safe dal doInBackground():
- Cambiare lo stato della proprietà 'progress' che (previa registrazione del listener) fa invocare poi propertyChange() dei listener nel contesto del EDT.
oppure
- Invocare publish(V...) e il worker invoca nel contesto del EDT il process(List<V>)
5) Terminato il doInBackground() il worker invoca in automatico, nel contesto del EDT, il done(). Metodo di cui puoi fare l'override per segnalare o fare qualcosa per la terminazione.
In pratica puoi accedere in modo "safe" alla interfaccia utente (es. aggiornare una progress bar) solo nel propertyChange(), process() e done().
Quel GroupLayout è un layout manager di una libreria esterna ... non lo conosco. Comunque ad occhio mi sembra che l'add della progress bar lo fa.Originariamente inviato da Cool81
Infine, ho costruito la progressBar utilizzando l'ide di Netbeans che genera da solo il codice che cmq riporto:
Sicuramente c'è qualcosa che non va se dici che non la visualizza. Ma ora non ho una visiona completa di tutto il tuo codice. E quindi non so dire.
Non è difficile ... c'è l'esempio, c'è il tutorial ....

Rispondi quotando