Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Problema con timertask

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305

    Problema con timertask

    Praticamente ho una classe che estende timertask
    codice:
    
    package jcallremember.client;
    
    
    import javax.swing.SwingUtilities;
    import jCallRemember.libreria.ClienteDB;
    
    
    /**
     *
     * @author Linux
     */
    public final class TaskAppuntamento extends java.util.TimerTask {
    
    
        public ClienteDB getInfo() {
            return info;
        }
    
    
        public void setInfo(ClienteDB info) {
            this.info = info;
        }
        private ClienteDB info;
    
    
        TaskAppuntamento(ClienteDB cliente) {
            System.out.println("COSTRUTTORE TASK APPUNTAMENTO");
            System.out.println(cliente.toString());
            this.setInfo(cliente);
        }
    
    
        @Override
        public void run() {
                   System.out.println("RUN TASK APPUNTAMENTO");
            System.out.println(info.toString());
            SwingUtilities.invokeLater(new FormSchedaCliente(this.getInfo()));
        }
    
    
    }
    il problema è che quando utilizzo il metodo schedule dell'oggetto timer per inserire dei task, se inserisco due task con un ora precendete a quella attuale, questi vengono avviati subito e fin qui tutto ok , se non fosse per il fatto che il metodo run viene eseguito utilizzando la stessa variabile info dell'ultimo task inserito , sia per il primo task che per l'ultimo.in poche parole quel form scheda cliente viene inizializzato tante volte quanti sono i task inseriti, ma sempre con lo stesso oggetto info.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da linux_r Visualizza il messaggio
    se inserisco due task con un ora precendete a quella attuale, questi vengono avviati subito
    Sì, questo è il comportamento noto/normale di java.util.Timer.

    Quote Originariamente inviata da linux_r Visualizza il messaggio
    se non fosse per il fatto che il metodo run viene eseguito utilizzando la stessa variabile info dell'ultimo task inserito , sia per il primo task che per l'ultimo.in poche parole quel form scheda cliente viene inizializzato tante volte quanti sono i task inseriti, ma sempre con lo stesso oggetto info.
    Il campo 'info' per il ClienteDB è "di istanza". Ciascuna istanza di TaskAppuntamento ha quindi il suo ClienteDB.
    Spetta a te fare in modo da avere tante istanze di TaskAppuntamento quante te ne servono, ciascuna con il suo ClienteDB su cui operare.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Sì, questo è il comportamento noto/normale di java.util.Timer.


    Il campo 'info' per il ClienteDB è "di istanza". Ciascuna istanza di TaskAppuntamento ha quindi il suo ClienteDB.
    Spetta a te fare in modo da avere tante istanze di TaskAppuntamento quante te ne servono, ciascuna con il suo ClienteDB su cui operare.
    si infatti ogni volta creo una nuova istanza con un nuovo oggetto cliente e la inserjsco nel timer ma ti ripeto il problema e che il metodo run utilizza sempre l ultimo campo info dell ultima istanza creata e per questo che ci stanno quelle stampe nel costruttore e nel run per vedere cosa succede e ho visto che le diverse istanze vengono create di volta in volta con in diverso oggetto cliente ma il metodo run utilizza l oggetto cliente dell ultima istanza di timertask inserita per ogni volta che viene richiamato

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da linux_r Visualizza il messaggio
    ho visto che le diverse istanze vengono create di volta in volta con in diverso oggetto cliente ma il metodo run utilizza l oggetto cliente dell ultima istanza di timertask inserita per ogni volta che viene richiamato
    Ma crei ogni volta dei nuovi oggetti ClienteDB ... oppure riusi lo stesso oggetto cambiandone lo "stato" di volta in volta? Perché in quest'ultimo caso, il problema è qui.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Ma crei ogni volta dei nuovi oggetti ClienteDB ... oppure riusi lo stesso oggetto cambiandone lo "stato" di volta in volta? Perché in quest'ultimo caso, il problema è qui.
    creo ogni volta un nuovo oggetto task appuntamento... pero ho risolto praticamente e colpa del reference di cliente nn mi sn accorto che usavo sempre lo stesso XD

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da linux_r Visualizza il messaggio
    nn mi sn accorto che usavo sempre lo stesso XD
    Ecco ... appunto, quello che immaginavo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.