Les fichier object en java

Fermé
toufik3119 Messages postés 8 Date d'inscription vendredi 2 janvier 2009 Statut Membre Dernière intervention 31 mai 2009 - 31 mai 2009 à 20:32
scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 - 31 mai 2009 à 22:04
Bonjour,
voila j'ai un probleme avec la manipulation des fichier sous java ,
je suis entrain de creé un iditeur UML (pour constuir des diagramme).
pour chaque activité il faut que le programme récupére des information et les enregistrer dans un fichier object ;
,et j'ai creé une botton pour modifier les information d'une activité , pour cela il faux récuperé les information déja donné et les modifié ,
voila la classe pour récupéré les information :
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.Serializable;

import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class propo extends JDialog implements Serializable{




private JLabel nomLabel, sourceLabel, capaLabel, infoLabel;
private transient JTextField nom;
private JTextArea capa,source,info;
private JScrollPane capascroll,sourcescroll,infoscroll;
private String inf=new String();
private JOptionPane msg = new JOptionPane();
private boolean act=false;




public propo(JFrame parent, String title, boolean modal){

super(parent, title, modal);
this.setSize(600, 600);
this.setLocationRelativeTo(null);
this.setResizable(false);
this.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
init();
this.setIconImage(new ImageIcon("src/image/palm2.png" ).getImage());

this.setVisible(true);

}

public void init(){

JPanel panNom = new JPanel();
panNom.setBackground(Color.white);
panNom.setPreferredSize(new Dimension(400, 60));
nom = new JTextField();
nom.setPreferredSize(new Dimension(220, 25));
panNom.setBorder(BorderFactory.createTitledBorder("Nom d'activité"));
nomLabel = new JLabel("nom :");
panNom.add(nomLabel);
panNom.add(nom);

JPanel pancapa = new JPanel();
pancapa.setBackground(Color.white);
pancapa.setPreferredSize(new Dimension(300, 150));
pancapa.setBorder(BorderFactory.createTitledBorder("capacité d'activité "));
capaLabel = new JLabel("capacité : ");
capa = new JTextArea();
capascroll = new JScrollPane(capa);
capascroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
capascroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
pancapa.setLayout(new GridLayout(1,1,5,5));
pancapa.add(capaLabel);
pancapa.add(capascroll);



JPanel pansour = new JPanel();
pansour.setBackground(Color.white);
pansour.setPreferredSize(new Dimension(300, 150));
pansour.setBorder(BorderFactory.createTitledBorder("source d'activité"));
sourceLabel = new JLabel("source : ");
source = new JTextArea();
sourcescroll = new JScrollPane(source);
sourcescroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
sourcescroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
pansour.setLayout(new GridLayout(1,1,5,5));
pansour.add(sourceLabel);
pansour.add(sourcescroll);


JPanel paninfo = new JPanel();
paninfo.setBackground(Color.white);
paninfo.setPreferredSize(new Dimension(300, 150));
paninfo.setBorder(BorderFactory.createTitledBorder("autre information"));
infoLabel = new JLabel("information : ");
info = new JTextArea();
infoscroll = new JScrollPane(info);
infoscroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
infoscroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
paninfo.setLayout(new GridLayout(1,1,5,5));
paninfo.add(infoLabel);
paninfo.add(infoscroll);


JPanel content = new JPanel();
content.setBackground(Color.white);
content.add(panNom);
content.add(pansour);
content.add(pancapa);
content.add(paninfo);




JPanel control = new JPanel();
JButton okBouton = new JButton("OK");

okBouton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
if (!nom.getText().equals("")){
inf = "** Informations sovgarder avec succé ** \n" +
nomLabel.getText()+" \t"+ nom.getText()+" \n" +
capaLabel.getText()+ " \t" + capa.getText()+ " \n" +
sourceLabel.getText()+ " \t" + source.getText()+" \n" +
infoLabel.getText()+ " \t"+info.getText();
setVisible(false);
msg.showMessageDialog(null,inf, "Activité Info", JOptionPane.INFORMATION_MESSAGE);
act=true;
}
else {inf ="aucun information saisi ---> voulez saisir le nom de l'activité";
msg.showMessageDialog(null, inf, "Erreur", JOptionPane.ERROR_MESSAGE);
}
}
});


JButton cancelBouton = new JButton("Annuler");
cancelBouton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
inf= "aucun information saisi";
setVisible(false);
msg.showMessageDialog(null, inf, "Erreur", JOptionPane.ERROR_MESSAGE);
}
});

control.add(okBouton);
control.add(cancelBouton);


this.getContentPane().add(content, BorderLayout.CENTER);
this.getContentPane().add(control, BorderLayout.SOUTH);









}
public void setnom(String a){ nom.setText(a);};
public void setcap(String a){ capa.setText(a);};
public void setsour(String a){ source.setText(a);};
public void setinfo(String a){ info.setText(a);};


public String getnom(){ return nom.getText();}
public String getcap(){ return capa.getText();}
public String getsour(){ return source.getText();}
public String getinfo(){ return info.getText();}
public boolean getact(){ return act;}

public String toString(){return inf;}
}
pour enregisté cette objet j'ai fait ca dans la classe main :
ObjectOutputStream oos;
try {
oos = new ObjectOutputStream(
new BufferedOutputStream(
new FileOutputStream(
new File("info.txt"))));

oos.writeObject(fet);
oos.close();
} catch (IOException ee) {
ee.printStackTrace();
}}
};

et la classe pour modifier :
import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;



import org.jgraph.JGraph;


public class modifier implements ActionListener {
JGraph g;
propo fet;
public modifier(JGraph graph)
{
this.g = graph;
}

public void actionPerformed(ActionEvent arg0) {
Object tt = g.getSelectionCell();
String t=tt.toString();
ObjectInputStream ois;
ObjectOutputStream oos;

try {
ois = new ObjectInputStream(
new BufferedInputStream(
new FileInputStream(
new File("info.txt"))));


try {

while(!((propo) ois.readObject()).getnom().equals(t)){
fet = new propo(null,"information",true);

fet.setnom(((propo) ois.readObject()).getnom());
fet.setcap(((propo) ois.readObject()).getcap());
fet.setinfo(((propo) ois.readObject()).getinfo());
fet.setsour(((propo) ois.readObject()).getsour());

};


} catch (ClassNotFoundException e) {
e.printStackTrace();
}

ois.close();
if(fet.getact()){


oos = new ObjectOutputStream(
new BufferedOutputStream(
new FileOutputStream(
new File("info.txt"))));

oos.writeObject(fet);

oos.close();}
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException ee) {
ee.printStackTrace();
}
}

}
et voila l'erreur qui se pose quand je clic sur modifier:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at propo.getnom(propo.java:170)
at modifier.actionPerformed(modifier.java:42)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

stp si quelq'un peut m'aidé n'ésite pas ...
merci.
A voir également:

1 réponse

scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 425
31 mai 2009 à 22:04
Ce serait tellement gentil de mettre ton code entre <code> et </code > afin que tout le monde puisse profiter de ton indentation et de la lisibilité de celui-ci.
0