Probleme d ajout des objets :Java

Fermé
saraseff Messages postés 125 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 27 avril 2013 - 24 avril 2011 à 15:27
Bonjour,

J ai un petit souci avec l utilisation des streams en java afin de stocker des donnees dans un fichier.

En fait,j ai une liste avec des objets "agence" et si l utilisateur veut en rajouter je lui donne un champs pour ecrire le nom de l'agence.Une fois qu il clique sur le bouton "creer" le nom de l agence doit y apparaitre mais bien sur doit aussi s ajouter au fichier que j ai nomme "Agences" et duquel je remplis la liste.

Le principe est simple mais sa ne marche que pour la premiere fois tandis que pour ajouter c 'est impossible et sa me sort des erreurs comme :
java.io.StreamCorruptedException: invalid stream header: 7372000E.

J ai un peu fouille sur le net et apparemment c est du a la reutilisation des ObjectOutputStream et qu'il fallait utiliser AppendableObjectOutputStream mais je ne sais pas comment je vais m en servir.

Voila le code et j espere avoir des reponses et suggestions de votre part.Merci
package interfaces;

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
import javax.swing.*;
import javax.swing.border.*;
import classes.Agence;


public class accueil extends JFrame implements ActionListener,Serializable{

	private static final long serialVersionUID = 1L;
	
	//components
	JLabel presente=new JLabel("Veuillez choisir l'agence bancaire: ");
	JLabel autre=new JLabel("Entrez le nom de l'agence bancaire: ");
	JTextField nvelle=new JTextField(10);
	JComboBox agnc=new JComboBox();
    JButton valider=new JButton("Valider");
    JButton creer=new JButton("Créer");
   
    //containers
    JPanel pan1=new JPanel();
    JPanel pan2=new JPanel();
    JPanel pan3=new JPanel();
    JPanel content= new JPanel();
    
    //importer les donnees
    Vector liste=new Vector();
    
    public accueil() throws IOException, ClassNotFoundException{
	
    	setTitle("Mon Application");
        setSize(500,300);
        setLocationRelativeTo(null);
        
        creer_Agence("Projet IHM");
        //ne sert qu a permettre de rajouter une agence
        agnc.addItem("Créer autre...");
        remplir_vector();
        remplir_combo();
        
    	agnc.addActionListener(this);
    	pan1.setLayout(new FlowLayout(FlowLayout.CENTER));
    	pan2.setLayout(new FlowLayout(FlowLayout.CENTER));
    	pan3.setLayout(new FlowLayout(FlowLayout.CENTER));
    	content.setLayout(new BoxLayout(content,BoxLayout.Y_AXIS));
    	content.setBounds(100, 100, 600, 300);
    	pan1.add(presente);pan1.add(agnc);
    	pan2.add(valider);
    	content.add(pan1);
    	content.add(pan2);
    	content.add(pan3);
    	agnc.setEditable(false);
    	getContentPane().add(content);
       	valider.addActionListener(this);
       	creer.addActionListener(this);
    	show();
    }
 

    
    public void creer_Agence(String s){
    	ObjectOutputStream o=null;
    	
    try{
		o=new ObjectOutputStream(new FileOutputStream("D:/Agences.txt"));
		Agence agence=new Agence(Agence.nbAgences);
		agence.setNom(s);
		o.writeObject(agence);
      }catch (FileNotFoundException ex) {
          ex.printStackTrace();
      }catch (IOException ex) {
    	  ex.printStackTrace();
      } finally {
          try {
              if (o!= null) {
            	  o.flush();
                  o.close();
              }
          } catch (IOException ex) {
              ex.printStackTrace();
          }
      }
  }

   
  
    public void remplir_vector(){
       ObjectInputStream o = null;
       liste.removeAllElements();
        
        try {
            
            //Construct the ObjectInputStream object
            o = new ObjectInputStream(new FileInputStream("D:/Agences.txt"));
            
            Object obj = null;
            
            while((obj = o.readObject()) != null) {  
               liste.addElement(((Agence)obj).getNom());    
            }
            
        
        } catch (EOFException ex) { //This exception will be caught when EOF is reached
            System.out.println("End of file reached.");
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            //Close the ObjectInputStream
            try {
                if (o!= null) {
                    o.close();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }
    public void remplir_combo(){
    	for(int i=0;i<liste.size();i++){
			agnc.addItem((String)(liste.elementAt(i)));
		}
    }
    
    public void actionPerformed(ActionEvent e){
    	
    	if(agnc.getSelectedItem()=="Créer autre..."){
    		pan3.add(autre);pan3.add(nvelle);pan3.add(creer);
    		pan3.setBorder(new LineBorder(Color.GRAY, 4));
    	    pan3.setBackground(Color.WHITE);
    	     
    	}
    	if(e.getSource()==valider){
    		new index(""+agnc.getSelectedItem());  
    	    this.setVisible(false);
    	}
    	if(e.getSource()==creer){
    		agnc.removeAllItems();
    		creer_Agence(nvelle.getText());
            remplir_vector();
            remplir_combo();
            agnc.addItem("Créer autre...");
    	}
    	
    }
	public static void main(String[] args) throws IOException, ClassNotFoundException {
		// TODO Auto-generated method stub
          new accueil();
	}

}





A voir également: