Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    107

    Problema con Calendar

    Ciao a tutti!!!!
    Non riesco a capire perchè se ho una classe che contiene come variabile di classe un oggetto Calendar...quando eseguo la serializzazione e poi la deserializzazione l'oggetto Calendar ha i campi del giorno del mese,del mese e dell'anno a 0.
    Aiuto!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!


    Ecco il codice:
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.NotSerializableException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.Serializable;
    import java.util.Calendar;


    public class DataProva implements Serializable {
    private int giorno;
    private String mese;
    private int anno;
    Calendar calendario = Calendar.getInstance();

    public void set(){
    String months[]={"Gennaio","Febbraio","Marzo","Aprile","Maggio"," Giugno",
    "Luglio","Agosto","Settembre","Ottobre","Novembre" ,"Dicembre"};
    giorno=calendario.get(Calendar.DAY_OF_MONTH);
    //calendario.add(Calendar.MONTH, 1); //aggiungere uno
    //mese=calendario.get(Calendar.MONTH);
    mese=months[calendario.get(Calendar.MONTH)];
    anno=calendario.get(Calendar.YEAR);
    }

    public void set(int giorni){
    calendario.add(Calendar.DAY_OF_MONTH, giorni);
    set();
    }


    public int getAnno(){
    return anno;
    }

    public String getMese(){
    return mese;
    }

    public int getGiorno(){
    return giorno;
    }

    public Calendar getCalendar(){
    return calendario;
    }

    }

    class ProvaData implements Serializable{
    DataProva data = new DataProva();

    public void set(){
    data.set();
    }

    public void set(int giorni){
    data.set(giorni);
    }

    public int getAnno(){
    return data.getAnno();
    }

    public String getMese(){
    return data.getMese();
    }

    public int getGiorno(){
    return data.getGiorno();
    }

    public Calendar getCalendar(){
    return data.getCalendar();
    }

    public static void main(String args[]){
    ProvaData data=new ProvaData();
    Serial serial=new Serial();
    data.set();
    System.out.println(data.getGiorno());
    System.out.println(data.getMese());
    System.out.println(data.getAnno());
    System.out.println("**************");

    ProvaData provaData=new ProvaData();


    serial.serializza(provaData, "FileProva");
    ProvaData dataDopoSerial = (ProvaData) serial.deserializza("FileProva");
    Calendar calendarioDopoSerial=dataDopoSerial.getCalendar();

    }

    }

    class Serial{
    private FileOutputStream fos;
    private ObjectOutputStream oos;
    private FileInputStream fis;
    private ObjectInputStream ois;

    // serializzazione oggetti
    public void serializza(Object obj,String nomeFile){
    try{
    //stream di output
    fos = new FileOutputStream(nomeFile);
    //stream di serializzazione, oos rappresenta il flusso di output
    //nel quale verranno scritti gli oggetti serializzati
    oos = new ObjectOutputStream(fos);
    }catch(FileNotFoundException f){
    System.out.println("Impossibile trovare il file "+ nomeFile);
    System.exit(0);
    }catch(IOException e){
    System.out.println("Errore nella creazione dello stream " +e);
    System.exit(0);
    }
    try{
    //scrittura su file della sequenza di byte rappresentativa dello stato dell’oggetto
    oos.writeObject(obj);
    }catch(NotSerializableException ns){
    System.out.println("Impossibile effettuare la serializzazione " +
    "perchè l'oggetto "+obj+" non implemta l'interfaccia Serializable");
    System.exit(0);
    }
    catch(IOException e){
    System.out.println("Impossibile serializzare l'oggetto " + obj.toString());
    System.exit(0);
    }

    }

    // deserializzazione oggetti
    public Object deserializza(String nomeFile){
    Object salvato= null;
    try{
    //stream di input
    fis = new FileInputStream(nomeFile);
    //stream di deserializzazione,ois è il flusso di input
    //dal quale verranno letti gli oggetti serializzati
    ois = new ObjectInputStream(fis);
    }catch(FileNotFoundException f){
    System.out.println("Impossibile trovare il file "+ nomeFile);
    System.exit(0);
    }catch(IOException e){
    System.out.println("Errore nella creazione dello stream " +e);
    System.exit(0);
    }
    try{
    //lettura e assegnazione dell’oggetto
    salvato = ois.readObject();
    } catch(IOException e){
    System.out.println("Eccezione durante la deserializzazione:" + e);
    System.exit(0);
    }catch(ClassNotFoundException cne) {
    System.out.println("Eccezione:"+cne);
    System.exit(0);
    }
    return salvato;
    }
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    41

    Re: Problema con Calendar

    Guarda non sono esperta ma credo che il problema stia qui:

    Originariamente inviato da Azzurra85

    public class DataProva implements Serializable {
    private int giorno;
    private String mese;
    private int anno;
    Calendar calendario = Calendar.getInstance();
    infatti tu chiedi nell'ultima riga che ho quotato di restituire il contenuto del Calendar, ma il Calendar in realtà non lo hai mai istanziato.
    Dovresti dirgli prima che
    Calendar variabile = new Calendar();

    Inoltre, credo che ci sia il jCalendar da usare, non so perché usi Calndar senza 'j', ma di questo non ti so dire meglio, non posso al momento controllare, sono proprio al volo ;-)

    spero di esserti stata utile, spero poi che qualcuno più esperto eventualmente mi rettifichi! ^___^

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    La classe ha un design non troppo efficente (sarebbe meglio usare i costruttori per settare le variabili) e soprattutto c'e' della confusione nel main.
    codice:
    public static void main(String args[]){
       //Istanzio un nuovo Oggetto ProvaData
       ProvaData data=new ProvaData();
       //Istanzio il "serializzatore"
       Serial serial=new Serial();
       //Uso il metodo set.Da questo momento i campi giorno,mese e anno di data sono settati
       data.set();
       //Stampo i campi. Fin qui OK
       System.out.println(data.getGiorno());
       System.out.println(data.getMese());
       System.out.println(data.getAnno());
       System.out.println("**************");
    
       //Istanzio un nuovo oggetto. Notare, in questo oggetto i campi non sono settati
       //perche' non ho invocato set. Settandoli nel costruttore si aggirerebbe il problema.
       ProvaData provaData=new ProvaData();
       //Serializzo e deserializzo l'oggetto con i campi settati a null o a 0.
       serial.serializza(provaData, "FileProva");
       ProvaData dataDopoSerial = (ProvaData) serial.deserializza("FileProva");
       Calendar calendarioDopoSerial=dataDopoSerial.getCalendar();
    }

  4. #4
    se modifichi il main in questo modo funziona
    public static void main(String args[]){
    ProvaData data=new ProvaData();
    Serial serial=new Serial();
    data.set();
    System.out.println(data.getGiorno());
    System.out.println(data.getMese());
    System.out.println(data.getAnno());
    System.out.println("**************");




    serial.serializza(data, "nomeFile");
    ProvaData dataDopoSerial = (ProvaData) serial.deserializza("nomefile");
    System.out.println(dataDopoSerial.getGiorno());
    System.out.println(dataDopoSerial.getMese());
    System.out.println(dataDopoSerial.getAnno());
    System.out.println("**************");


    }

    }

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    41

    Re: Re: Problema con Calendar

    Originariamente inviato da shirim
    credo che ci sia il jCalendar da usare
    mi correggo da me: avevo in mente il GregorianCalendar ;-)

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