Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [JAVA] finestra di log

  1. #1

    [JAVA] finestra di log

    Ok, ho un programma che ho scritto che deve effettuare diverse operazioni che possono arrivare a richiedere qualche minuto per la loro esecuzione.

    Quindi, per non lasciare l'utente da solo a disagio durante l'esecuzione, vorrei farsì che quando preme sul pulsante "esegui", gli si apra un piccolo dialog in cui mano a mano che effettuo le operazioni riporto a "mo'" di log i risultati ottenuti.

    Ho scritto quindi una classe che estende JDialog (class Creazione) in cui c'è semplicemente un JScrollPane che continee una JList (log) e un bottone "ok" disabilitato che servirà per chiudere il dialog finite le operazioni.

    Utilizzo la JList attraverso un DefaultJListModel (logModel).

    Riporto ora il codice della funzione che apre il Dialog e fa partire l'esecuzione:

    codice:
    void funzione(){
     Creazione c=new Creazione(null, "Elenco operazioni", false);
        c.setSize(560,360);
        c.setResizable(false);
        c.setVisible(true);
        this.setEnabled(false);
    
        c.logModel.addElement("Inizio esecuzione in corso:");
        c.logModel.addElement("l'operazione può richiedere diversi minuti a seconda del numero di operazioni.");
        c.logModel.addElement("________________________________________________________________________");
    
        c.setVisible(true);
        
        esegui()//funzione che esegue le operazioni necessarie
    
        c.logModel.addElement("Le operazioni sono state eseguite correttamente");
        c.Ok.setEnabled(true);
        this.setEnabled(true);
      }
    Tralasciando il fatto che non passo c alla funzione esegui (verrà poi implementato) il problema è il seguente.

    Quando parte l'esecuzione viene disegnata a schermo la finestra del dialog, ma completamente vuota.
    Vengono eseguite le operazioni e finito tutto viene disegnato anche l'internod ella finestra di Dialog... Il risultato non è affatto quello desiderato.

    Io vorrei che ogni volta che vado ad aggiungere un elemento alla Jlist log, questa venga immediatamente aggiornata sullo skermo.

    Dove sbaglio?
    Cosa posso fare?

    Ringrazio tutti per l'aiuto che mi darete.

    ciao!

  2. #2
    Nessuno sa come aiutarmi?

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Queste operazioni, generalmente, devono essere eseguita da un Thread: in questo modo 2 o più operazioni possono essere eseguite "in parallelo", quindi si può far eseguire un passo di operazione e un passo di un'altra operazione.

    Dovresti darmi maggiori dettagli riguardo la tua applicazione, dicendomi se le operazioni che vengono eseguite (compreso l'aggiornamento della JDialog) sono parte di un Thread o meno.


    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

  4. #4
    tutto il programma non fa uso di thread, ma solo di operazioni eseguite in modo sequenziale.

    Cmq mi risulta strano l'utilizzo di thread.
    Mi spiego: non devo eseguire le due cose in modo parallelo,
    ma effettuo un operazione e poi metto sulla finestra di log che l'ho eseguita, poi passo a quella successiva e così via.

    Magari mi sbaglio, ma se usassi due thread uno per fare le operazioni e l'altro per gestire la finestra di log, come farei a sapere quando far scrivere il log, non sapendo quando viene ultimata un'operazione?


    Ciao e grazie!

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Il problema nasce dall'uso di finestre: se una finestra è impegnata nell'elaborazione di qualcosa rimarrà "bloccata" e le altre non verranno aggiornate a dovere. Bisogna quindi spostare l'elaborazione principale in un thread che si occuperà, non solo dell'avanzamento dell'operazione sequenziale, ma anche dell'aggiornamento della finestra di log ad ogni operazione eseguita.


    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

  6. #6
    Ok, colto!

    Mi potresti fare un riepiloghino su come aprire un nuovo thread e fargli eseguire una funzione?

    Grazie!

  7. #7
    ok, mi sono guardato un po' di appunti e ce l'ho fatta! grazie!

    Adesso mi si presenta un nuovo problema ma credo sia giusto aprire una nuova discussione!


    ciao e grazie

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 © 2024 vBulletin Solutions, Inc. All rights reserved.