Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24

Discussione: Swing Worker

  1. #1

    Swing Worker

    Ciao a tutti,

    sto' realizzando un'applicazione grafica che riceve dati tramite interfacce RPC da un server in background. La mia applicazione deve ricevere questi dati e visualizzarli in vari forme (Tabelle, liste ecc...). Per sbloccare tutte le chiamate in ingresso RPC ho inserito tutti gli aggiornamenti grafici in Thread specifici in modo da:

    1) Ricevo i dati;
    2) Faccio uno store dei dati;
    3) libero l'interfaccia RPC;
    4) Notifico la ricezione dei dati ad un Thread in background (realizzato con gli swingthread);
    5) il thread in background si occupa dell'aggiornamento grafico.

    Ho realizzato questo thread di background con uno swingThread tramite un ciclo infinito all'interno del metodo doInBackground. Il mio dubbio e' il seguente: utilizzando gli swing thread mi vengono risolti i problemi legati all'aggiornamento dell'interfaccia grafica oppure per come l'ho implementato sarebbe stato lo stesso utilizzare un normalissimo Thread?

    Grazie mille!

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Se non ricordo male si, perché le modifiche a video di solito le facevo in dofinal.

  3. #3
    Si cosa??? Scusami ma non ho ben capito la tua risposta! doFinal cosa sarebbe , non e' un metodo degli SwingWorker!!

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    sbagliato era done() scusa mea culpa, guardavo da giorni una cosa con doFinal e mi sono convinta che fosse uguale

    cmq intendo sarebbe uguale al normale thread.
    Guarda qui invece

    http://download.oracle.com/javase/6/...ingWorker.html

    e qui

    http://download.oracle.com/javase/tu...cy/worker.html

    gli update grafici (a parte il progress bar a cui è associato) vanno nel metodo done.

    Poi anziché un ciclo infinito, perché non gestisci degli eventi?

  5. #5
    Eventi in che modo? Potresti spiegarmi meglio?? Grazie

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    nel senso che tu puoi creare un evento personalizzato che non fa altro che forzare l'update a video. Fai la tua roba dove ti pare, dati pronti per fare update lanci l'evento (tipo fireUpdateFrameEvent) e questo fa i mestieri di aggiornamento a video.

  7. #7
    Ok pero'... penso sia troppo complesso gestirlo cosi... anche perche' aggiorno molti gadged a fronte di svariate interfacce RPC in ingresso!!! in ogni caso il metodo done non riesco ad utilizzarlo.... ti faccio un esempio di come lavora il mio thread

    codice:
    RPC_Data Data dataRPC = null;
    boolean setDisplayDetails = false;
     public void setUpdateTable(RPC_Data arg1)
            {
                synchronized (updateTopLevel) {
                    dataRPC = arg1;
                    setDisplayDetails = true;
                    updateTopLevel.notifyAll();
                }
            }
    
            /*
             * doInBackground: This method work in background and update the data
             * structure and the diplay.
             */
            @Override
            protected Object doInBackground()
            {
                synchronized (updateTopLevel) {
                    while (true) {
                        try {
                            updateTopLevel.wait();
    
                        }
                        catch (InterruptedException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
    
                        //update the CCF Button
                        if( setDisplayDetails ) {
                             //operazioni grafiche e di aggiornamento
                              setDisplayDetails = false;
                           } 
                    }
             }

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    bah io lo trovo più semplice e più efficiente di un ciclo infinito

    detto questo, quale errore hai?

  9. #9
    L'errore per cui non riesco ad usare il done()?? e perche' se sposto tutta questa logica nel done() e non nel doinBackground() con un while a true lui blocca tutto l'EDT e quindi non si visualizza nulla....

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    l'errore che hai, non riesci a fare qualcosa, ma cosa?

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.