Précédent   Forum du club des développeurs et IT Pro > Java > Général Java > Persistance
Persistance Forum d'entraide pour la persistance en Java : base de donnée, xml, mapping orienté objet, ... Posez vos questions sur iBatis, JDO, XmlBeans, Castor, JAXB, XStream, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 20/08/2012, 14h13   #1
richard_sraing
Membre habitué
 
Avatar de richard_sraing
 
Homme Raphaël
Responsable de service informatique
Inscription : avril 2005
Messages : 445
Détails du profil
Informations personnelles :
Nom : Homme Raphaël
Localisation : Belgique

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : avril 2005
Messages : 445
Points : 145
Points : 145
Envoyer un message via MSN à richard_sraing
Par défaut Serializable + classe contenant tableau d'objet

Bonjour à tous,

Alors voilà mon soucis.

J'ai une première classe
Code java :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
package classes;
 
import MyExceptions.DateException;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Calendar;
 
/**
 *
 * @author threis raphael
 */
public class cPrestation implements Serializable{
 
    // <editor-fold desc="Variables" defaultstate="collapsed">
    private int iMois;
    private int iAnnee;
    private cJournee[] cjJours;
    private int iIdOuvrier;
    private String sNom;
    private String sPrenom;
    // </editor-fold>
 
    // <editor-fold desc="Constructeurs" defaultstate="collapsed">
    /**
     * Constructeur par défaut
     */
    public cPrestation() {
        iMois = 0;
        iAnnee = 0;
        iIdOuvrier = 0;
        sNom = "";
        sPrenom = "";
    }
 
    /**
     * Initialise les prestations du mois pour l'ouvrier
     * @param iId       Identifiant de l'ouvrier.
     * @param Nom       Nom de l'ouvrier.
     * @param Prenom    Prénom de l'ouvrier
     */
    public cPrestation(int iId, String Nom, String Prenom){
        this.iIdOuvrier = iId;
        this.sNom = Nom;
        this.sPrenom = Prenom;
    }
    // </editor-fold>
 
    // <editor-fold desc="Setter et Getter" defaultstate="collapsed">
    public cJournee[] getCjJours() {
        return cjJours;
    }
 
    /**
     * Initialise le tableau des jours du mois avec le nombre de jours du mois.
     */
    private void setCjJours() throws DateException {
        if( this.iMois >= 0 && this.iAnnee >= 0)
        {
            Calendar c = Calendar.getInstance();
            c.set(Calendar.MONTH, this.iMois);
            c.set(Calendar.YEAR, this.iAnnee);
            c.set(Calendar.DAY_OF_MONTH, 1);
            int nbJours = c.getActualMaximum(Calendar.DAY_OF_MONTH);
            cjJours = new cJournee[nbJours];
        }
        else if(this.iMois<1){
            throw new DateException("Le mois est incohérent !");
        }
        else if(this.iAnnee<1){
            throw new DateException("L'année est incohérente !");
        }
    }
 
    public int getAnnee() {
        return iAnnee;
    }
 
    public void setAnnee(int iAnnee) {
        this.iAnnee = iAnnee;
        try{
            setCjJours();
        }
        catch(DateException de){
            System.out.println(de.getMessage());
        }
    }
 
    public int getMois() {
        return iMois;
    }
 
    public void setMois(int iMois) {
        this.iMois = iMois;
        try{
            setCjJours();
        }
        catch(DateException de){
            System.out.println(de.getMessage());
        }
    }
 
    public int getIdOuvrier() {
        return iIdOuvrier;
    }
 
    public void setIdOuvrier(int idOuvrier) {
        this.iIdOuvrier = idOuvrier;
    }
 
    public String getNom() {
        return sNom;
    }
 
    public void setNom(String sNom) {
        this.sNom = sNom;
    }
 
    public String getPrenom() {
        return sPrenom;
    }
 
    public void setPrenom(String sPrenom) {
        this.sPrenom = sPrenom;
    }
    // </editor-fold>
 
    /**
     *
     * @return boolean  true si élément sauver avec succès
     *                  false si une erreur est survenue
     */
    public boolean save(){
        try{
            FileOutputStream fileOut = new FileOutputStream("c:\\deneigement\\"+iIdOuvrier+"-"+iAnnee+"-"+iMois+".ser");
            ObjectOutputStream out = new ObjectOutputStream(fileOut);
            out.writeObject(this);
            out.close();
            fileOut.close();
        }
        catch(Exception e){
            System.out.println("Erreur:"+e.getMessage());
            return false;
        }
        return true;
    }
 
    public void setPrestation(float[] pPrestation){
 
    }
}
Vous voyez que cette première, contient un vecteur d'objets cJournee que voici :
Code JAVA :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package classes;
 
import java.io.Serializable;
 
/**
 * Classe contenant les informations d'une journée de prestation
 * Contient un tableau des heures prestées pour chaque tranche horaire
 * @author threis raphael
 */
public class cJournee implements Serializable{
 
    private float[] fHeures;
    private String[] sFourchette;
    private float[] fCoef;
 
    /**
     * Construit l'objet cJournee avec les informations de tranche horaire du
     * fichier de configuration, avec autant de tranches horaires que requises.
     */
    public cJournee(){
        this.fHeures = new float[deneigement.Deneigement.config.getLength()];
        this.sFourchette = new String[deneigement.Deneigement.config.getLength()];
        for (int i = 0; i < deneigement.Deneigement.config.getLength(); i++){
            this.sFourchette[i] = deneigement.Deneigement.config.getHoraire(i).getFourchette();
            this.fCoef[i] = deneigement.Deneigement.config.getHoraire(i).getCoefficient();
        }
    }
 
    /**
     * Construit l'objet cJournee avec autant de tranche horaire que spécifiées
     * en paramètres (p.ex.: 1 pour le dimanche avec un coef de 2)
     * @param nbHoraire     Nombre de tranche horaire si différente de la valeur par
     *                      défaut
     * @param pFourchette   Toutes les fourchettes horaires requises pour la journée en question
     * @param pCoef         Coefficient pour toutes les fourchettes horaires
     */
    public cJournee(int nbHoraire, String[] pFourchette, float[] pCoef){
        this.fHeures = new float[nbHoraire];
        this.sFourchette = pFourchette;
        this.fCoef = pCoef;
    }
 
    /**
     * Méthode retournant le nombre d'heures prestées pour la tranche horaire spécifiée
     * @param Horaire   tranche horaire (p.ex. : 6h-8h)
     * @return float    nombre d'heures prestées
     */
    public float getHeures(int Horaire){
        return fHeures[Horaire];
    }
 
    /**
     * Méthode initialisant le nombre d'heure pour une tranche horaire
     * @param Horaire   indice de l'heure
     * @param Value     nombre d'heure prestées
     */
    public void setHeures(int Horaire, float Value){
        this.fHeures[Horaire] = Value;
    }
}

Lorsque je sauve mes objets cPrestations, je souhaiterais que le vecteur de cJournee soit également sauvé, hors ce n'est pas le cas.
Pourtant, chacune des deux classes disposent des implements de Serializable, ce qui devrait les faire se sauver non?

Je souhaite en fait, disposer d'un fichier contenant toutes informations de mon objet Prestation.

En vous remerciant pour l'aide que vous pourrez m'accorder, je vous souhaite à tous, une bonne journée.
__________________
First step: F.A.Q.
Second step: Forum -> Recherche
Thrid step: Forum -> Poser une question
Fourth step: Forum -> Attendre une réponse
Fifth step: Forum -> Remercier les personnes ayant répondu et signaler comme résolu

Simple non ? l'utilisation de developpez.com
richard_sraing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2012, 15h13   #2
tchize_
Expert Confirmé Sénior
 
Avatar de tchize_
 
Homme
Responsable de service informatique
Inscription : avril 2007
Messages : 18 278
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : Belgique

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Service public

Informations forums :
Inscription : avril 2007
Messages : 18 278
Points : 32 754
Points : 32 754
Envoyer un message via MSN à tchize_ Envoyer un message via Skype™ à tchize_
un tableau, pas un vecteur

Ceci dit, qu'est-ce qui te fait dire que les cjournee ne sont pas sauvés?

PS: tu devrais respecter les conventions java dans la notation des nom de classe: UpperCamelCase :-)
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et
Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir.
tchize_ est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/08/2012, 15h14   #3
Gardyen
Membre chevronné
 
Avatar de Gardyen
 
Inscription : août 2005
Messages : 494
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France

Informations forums :
Inscription : août 2005
Messages : 494
Points : 676
Points : 676
Envoyer un message via ICQ à Gardyen
tu peux montrer le code où tu essayes de les 'sauver' ?
__________________
Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
Plus les choses changent, plus elles restent les mêmes
Gardyen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2012, 15h36   #4
richard_sraing
Membre habitué
 
Avatar de richard_sraing
 
Homme Raphaël
Responsable de service informatique
Inscription : avril 2005
Messages : 445
Détails du profil
Informations personnelles :
Nom : Homme Raphaël
Localisation : Belgique

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : avril 2005
Messages : 445
Points : 145
Points : 145
Envoyer un message via MSN à richard_sraing
Voici l'appel que je fais de ma méthode save() se trouvant dans la classe cPrestation.

Code java :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
    private void jbSaveActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        String[] splitted = jcbOuvriers.getSelectedItem().toString().split(" ");
        int idOuvrier = Integer.parseInt(splitted[0]);
        String sAnnee = jcbAnnee.getSelectedItem().toString();
        int iMois = jcbMois.getSelectedIndex()+1;
 
        cPrestation cpPresta = new cPrestation(idOuvrier, splitted[1], splitted[2]);
        cpPresta.setAnnee(Integer.parseInt(sAnnee));
        cpPresta.setMois(iMois);
 
        TableModel model = jtPrestation.getModel();
        int nbLigne = model.getRowCount();
 
        float[] fPrestation;
        for(int iLigne = 0; iLigne < nbLigne; iLigne++){
            int nbColonne = model.getColumnCount();
            fPrestation = new float[nbColonne];
            for( int iColonne = 1; iColonne < nbColonne; iColonne++){
                try{
                    if( model.getValueAt(iLigne, iColonne) != "" ){
                        splitted = model.getValueAt(iLigne, iColonne).toString().split(":");
                        fPrestation[iColonne-1] = Float.parseFloat(splitted[0])+(Float.parseFloat(splitted[1])/60);
                        cpPresta.setPrestation(fPrestation);
                    }
                }
                catch( NullPointerException npe){
                    System.out.println("Erreur: "+npe.getMessage());
                    iColonne = nbColonne;
                }
            }
        }
 
        if( !cpPresta.save()){
            JOptionPane.showMessageDialog(this, "Erreur lors de la sauvegarde des heures.\nVeuillez réessayer.", "Erreur", JOptionPane.ERROR_MESSAGE);
        }
        else{
            this.dispose();
        }
    }

Et voici la méthode save() de ma classe cPrestation
Code java :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public boolean save(){
    try{
        FileOutputStream fileOut = new FileOutputStream("c:\\deneigement\\"+iIdOuvrier+"-"+iAnnee+"-"+iMois+".ser");
        ObjectOutputStream out = new ObjectOutputStream(fileOut);
        out.writeObject(this);
        out.close();
        fileOut.close();
    }
    catch(Exception e){
        System.out.println("Erreur:"+e.getMessage());
        return false;
    }
    return true;
}
Fichiers attachés
Type de fichier : java cPrestation.java (3,8 Ko, 1 affichages)
Type de fichier : java cJournee.java (2,2 Ko, 0 affichages)
__________________
First step: F.A.Q.
Second step: Forum -> Recherche
Thrid step: Forum -> Poser une question
Fourth step: Forum -> Attendre une réponse
Fifth step: Forum -> Remercier les personnes ayant répondu et signaler comme résolu

Simple non ? l'utilisation de developpez.com
richard_sraing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2012, 15h39   #5
richard_sraing
Membre habitué
 
Avatar de richard_sraing
 
Homme Raphaël
Responsable de service informatique
Inscription : avril 2005
Messages : 445
Détails du profil
Informations personnelles :
Nom : Homme Raphaël
Localisation : Belgique

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : avril 2005
Messages : 445
Points : 145
Points : 145
Envoyer un message via MSN à richard_sraing
Citation:
Envoyé par tchize_ Voir le message
PS: tu devrais respecter les conventions java dans la notation des nom de classe: UpperCamelCase :-)
En fait, la norme que j'utilise n'est surement mentionnée nulle part, mais, étant donné que dans la majorité des projets, je suis le seul développeur, cela m'a toujours très bien convenu.

si par exemple un variable se nomme jbSave, il s'agit d'un jButton utiliser pour sauver. un jtfNom sera un JTextField contenant le nom et un jlNom le label correspondant.
Je sais pour la création de mes classes qu'il faut faire commencer le nom de cette dernière par une majuscule (même l'IDE, à savoir NetBeans le conseil).
__________________
First step: F.A.Q.
Second step: Forum -> Recherche
Thrid step: Forum -> Poser une question
Fourth step: Forum -> Attendre une réponse
Fifth step: Forum -> Remercier les personnes ayant répondu et signaler comme résolu

Simple non ? l'utilisation de developpez.com
richard_sraing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2012, 15h59   #6
Gardyen
Membre chevronné
 
Avatar de Gardyen
 
Inscription : août 2005
Messages : 494
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France

Informations forums :
Inscription : août 2005
Messages : 494
Points : 676
Points : 676
Envoyer un message via ICQ à Gardyen
dans la méthode où tu appelles le save, quand est-ce que tu utilises les cJournee ?
__________________
Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
Plus les choses changent, plus elles restent les mêmes
Gardyen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2012, 16h06   #7
richard_sraing
Membre habitué
 
Avatar de richard_sraing
 
Homme Raphaël
Responsable de service informatique
Inscription : avril 2005
Messages : 445
Détails du profil
Informations personnelles :
Nom : Homme Raphaël
Localisation : Belgique

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : avril 2005
Messages : 445
Points : 145
Points : 145
Envoyer un message via MSN à richard_sraing
Ligne 137 de ma classe CPrestation :
Code java :
out.writeObject(this);
Cette instructions va bien sauver mon objet non ? Etant donné que mon objet contient un tableau d'autres objets, ces derniers, se trouvant dans le tableau donc, devraient être sauvés aussi non ?

A mon avis, je loupe un épisode... mais le tout est de savoir lequel...
__________________
First step: F.A.Q.
Second step: Forum -> Recherche
Thrid step: Forum -> Poser une question
Fourth step: Forum -> Attendre une réponse
Fifth step: Forum -> Remercier les personnes ayant répondu et signaler comme résolu

Simple non ? l'utilisation de developpez.com
richard_sraing est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2012, 16h15   #8
tchize_
Expert Confirmé Sénior
 
Avatar de tchize_
 
Homme
Responsable de service informatique
Inscription : avril 2007
Messages : 18 278
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : Belgique

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Service public

Informations forums :
Inscription : avril 2007
Messages : 18 278
Points : 32 754
Points : 32 754
Envoyer un message via MSN à tchize_ Envoyer un message via Skype™ à tchize_
tu n'as toujours pas répondu à la question: qu'est-ce qui te fait croire que ce n'est pas sauvé? De plus, effectivement, nulle part dans ton code tu ne donne de valeur à mettre dans le tableau. Donc tu sauve un tableau plein de nulls
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et
Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir.
tchize_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2012, 16h32   #9
richard_sraing
Membre habitué
 
Avatar de richard_sraing
 
Homme Raphaël
Responsable de service informatique
Inscription : avril 2005
Messages : 445
Détails du profil
Informations personnelles :
Nom : Homme Raphaël
Localisation : Belgique

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : avril 2005
Messages : 445
Points : 145
Points : 145
Envoyer un message via MSN à richard_sraing
Mouais, la pièce vient de tomber.

En fait, il me manque la méthode setPrestation qui n'est pas encore complétée...
__________________
First step: F.A.Q.
Second step: Forum -> Recherche
Thrid step: Forum -> Poser une question
Fourth step: Forum -> Attendre une réponse
Fifth step: Forum -> Remercier les personnes ayant répondu et signaler comme résolu

Simple non ? l'utilisation de developpez.com
richard_sraing est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 18h20.


 
 
 
 
Partenaires

Hébergement Web