Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Eseguire un flush su una gui

    Ciao a tutti, sono nuovo nel forum, ma l'ho sempre frequentato quando mi è capitato.
    Ho creato in java una GUI, che genera un file SQL, dando un determinato file. Il mio problema sta che questo determinato file ha sui 5000 oggetti o più, e quando eseguo questo ciclo mi si blocca la gui mentre se faccio insieme System.out.println mi stampa tranquillamente mentre la GUI è bloccata.
    Io vorrei evitare che si blocchi, perchè la ho messo una progressbar e un textarea dei logs, e siccome si blocca non si aggiornano mai..
    Avete soluzioni?

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

    Re: Eseguire un flush su una gui

    Originariamente inviato da Sevenarth
    Il mio problema sta che questo determinato file ha sui 5000 oggetti o più, e quando eseguo questo ciclo mi si blocca la gui mentre se faccio insieme System.out.println mi stampa tranquillamente mentre la GUI è bloccata.
    Io vorrei evitare che si blocchi, perchè la ho messo una progressbar e un textarea dei logs, e siccome si blocca non si aggiornano mai..
    Al 99% è la solita questione: stai tenendo tu "impegnato" il EDT (event dispatch thread) e quindi nulla si può aggiornare a video.

    La soluzione è quella di eseguire le operazioni "lunghe" non nel EDT ma nel contesto di un thread a sé stante. Con tutto quello che comporta circa la sincronizzazione e l'accesso ai componenti (che va fatto solo nel EDT).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    E come potrei fare? Io non sono ancora molto esperto di Java...xD

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Sevenarth
    E come potrei fare? Io non sono ancora molto esperto di Java...xD
    Capisco ma quando si inizia con AWT/Swing queste questioni (thread, EDT, sincronizzazione) vanno prima o poi comprese, specialmente in casi come il tuo.

    Al momento posso solo indicare i soliti link che ho già postato chissà quante volte:
    Concurrency in Swing - Threads and Swing

    Ah, e guarda anche tra i miei Java Examples (vedi firma), sezione AWT/Swing - Concurrency per un esempio di come eseguire un lavoro "lungo".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Grazie Mille
    ultima domanda, se uso Swing Worker come da te citato il sito, e faccio swingworker.start(); dovrebbe funzionare o è un metodo più complicato?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Sevenarth
    ultima domanda, se uso Swing Worker come da te citato il sito, e faccio swingworker.start(); dovrebbe funzionare o è un metodo più complicato?
    Attenzione!

    Una cosa è usare direttamente un thread nudo e crudo cioè new TuoThread() (se hai esteso Thread) oppure new Thread(tuoRunnable) (se hai implementato Runnable). Ma sarebbe tutto a tuo carico, comprese le eventuali operazioni per far eseguire dei pezzetti di codice nel EDT per aggiornare la interfaccia utente.

    Ben altra cosa invece è usare uno SwingWorker (che è "di serie" in Java 6 mentre per Java 5 c'è il sorgente dal tutorial Sun). Sotto sotto uno SwingWorker ovviamente usa un thread (che è alla base di qualunque esecuzione) ma è molto di più. Intanto ha un ciclo di vita più particolare, con dei metodi specifici di cui puoi fare l'override e poi offre già dei metodi per gestire la notifica del "progresso" e la esecuzione di qualcosa nella interfaccia utente senza preoccuparsi dei dettagli per il passaggio al EDT.
    Insomma, uno SwingWorker è solamente uno "strato" di software che fornisce una maggiore astrazione per la esecuzione di operazioni in background.

    Nessuno dei due modi è giusto o sbagliato più dell'altro ... sono semplicemente 2 livelli differenti per gestire operazioni in background.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Ho preso parte dell'esempio sul tuo sito a Concurrency. Ora funziona alla grande! Grazie Mille!
    Solo che la progressbar non si aggiorna lol vabbe risolverò
    Ho appena notato che dopo un po' si blocca.. non ho capito se è perchè ha finito o meno

  8. #8
    Risolto tutto! Senti percaso sai un metodo migliore? Perchè con il tuo va a scatti la gui :|
    Voglio anche un esempio pratico per come far funzionare il metodo che mi dai altrimenti non capisco nulla xD

  9. #9
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da Sevenarth
    Voglio anche un esempio pratico
    Voglio?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da Sevenarth
    Senti percaso sai un metodo migliore? Perchè con il tuo va a scatti la gui :|
    Voglio anche un esempio pratico per come far funzionare il metodo che mi dai altrimenti non capisco nulla xD
    Questo è un forum di "discussione" tecnico, non un servizio gratuito di sviluppo codice (è scritto chiaramente anche nel regolamento interno).

    Per richieste di sviluppo codice, c'è il forum "Offro Lavoro / Collaborazione".


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.