Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Thread [JAVA]

  1. #1

    Thread [JAVA]

    Scusate, sono nuovo di Java e del forum, vi scrivo perché sto' sviluppando un progetto che prevede l'esecuzione di procedure in Background tramite thread.
    Tutto sembra funzionare, ora però ho un problema, vorrei aprire un form Jdialog alla fine di thread che dovrebbe visualizzare la graficazione dei dati acquisiti durante il thread, .... non capisco come posso fare, ho provato a creare una funzione public sulla MainForm e passare il parametro della stessa al thread, ma non funziona.
    Qual'è la logica corretta?
    Come faccio a monitorare la fine del thread dalla main form e di conseguenza aprire il form?

    Grazie

  2. #2

  3. #3
    Originariamente inviato da Mr.Bloom
    http://docs.oracle.com/javase/tutori...cy/worker.html
    Grazie per la segnalazione, un chiarimento.

    Secondo te è corretto un utilizzo di questo tipo:

    Nella mainForm mi creo una funzione (VisualizzaRisultati) che richiama un jdialog con i risultati della mia acquisizione.
    Passo all'oggetto SwinghWolker il parametro mainForm.this e quindi al metodo done faccio eseguire mainForm.VisualizzaRisultati;

    Oppure è più corretto richiamare direttamente un oggetto jdialog dal metodo done che mi visualizza il risultato?

    .... oppure non ho capito nulla?

    Grazie

  4. #4
    Non ho capito al 100% la tua idea:

    comunque io lo farei grosso modo cosi :


    nella GUI hai un bottone che inizia la computazione in back ground
    ovvero nell ActionListener del bottone crei uno SwingWorker.

    codice:
    new SwingWorker<TipoDatiDaComputare,Void> {
        public TipoDatiDaComputare doInBackground() {
                    TipoDatidaComputare ret = computaDati();
                    return ret;
        }
    
        public void done(){   // viene automaticamente eseguito nell Event Dispatching Thread
            TipoDatidaComputare ret  = get();
            visualizzaNellaGui(ret);
        }
    
    }.execute();

    Automaticamente ti esegue doInBackground in un thread in background e done nell'EDT (dato che non e' consigliabile modificate i componenti dell-interfaccia grafica fuori dall EDT)


    Poi se approfondisci la documentazione, scoprirai che puoi fare altre cose come pubblicare dei risultati temporanei della computazione in background o anche visualizzare una ProgressBar e dare all utente la possibilita' di interrompere la computazione se si stufa.

    Il tutto senza mai bloccare l'interfaccia grafica a causa di computazioni lunghe nell'EDT



  5. #5
    GRAZIE!

    Mi metto a studiare, perchè, guardando il tuo codice, mi son reso conto che, anche se tutto funziona, non è applicato correttamente.

    Ci Sentiamo.

  6. #6
    Fatto, grazie per il consiglio, Funziona!

    Un'ultima cosa, se possibile.
    Lancio un thread per aprire anche delle finestre jdialog partendo dalla form principale. Così facendo pensavo che il foces ritornasse subito alla Main Form e mi permettesse di effettuare altri "Click" per aprire altre form.
    Però il focus rimane sempre sulla jdialog fino a quando è aperta.
    Come posso fare affinchè possa aprire più finestre JDialog contemporaneamente e all'occorrenza possa cliccare su di un jbutton della MAinForm?
    Comportamento tipo MDI application?

  7. #7
    OK, sistemato anche questo, a furia di fare copia incolla di codice vario, non mi ero reso conto che , nella from, abilitavo sempre modal=true!


    ........

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.