StreamCorruptedException: invalid stream header

Cafekafe Messages postés 25 Date d'inscription mercredi 8 octobre 2008 Statut Membre Dernière intervention 17 juin 2010 - 28 mai 2010 à 01:30
benmor Messages postés 49 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 27 novembre 2011 - 29 mai 2010 à 08:54
Bonjour à tous! J'essaie de produire un truc qui affiche deux strings juxtaposées dans un fichier et les mettre respectivement dans les JTextFields appropriés. Il s'agit d'une partie d'un jeu de pendu ou un joueur doit choisir le mot que l'autre joueur aura a choisir ainsi que l'indice qui sera relié. En pressant "Mot suivant" le mot et l'indice suivant dans le ficher doit afficher dans les mêmes cases jusqu'a ce que la personne presse "OK" pour choisir le mot. Le fichier ressemble à ceci, c'est un .txt

"pendu","le nom du jeu"
"gardien","dernière ligne de défense"

et ainsi de suite, j'aimerais également "wrapper" les mots, de sorte que lorsque je suis un derniers mots de la liste je puisse revenir au premier, mais je ne sais pas comment m'y prendre.

Bref, en utilisant le code suivant je recoit une exception "StreamCorruptedException: invalid stream header" à la ligne 61 ci-dessous. Je ne sais pas quoi faire pour le corriger!

entree = new ObjectInputStream(new FileInputStream(Words1));

Merci à l'avance pour votre aide!


/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package wordreader;

/**
* @(#)WordReader.java
*
*
* @author
* @version 1.00 2010/5/19
*/
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.text.DecimalFormat;

import javax.swing.*;

public class WordReader extends JFrame implements Serializable {

private ObjectOutputStream sortie;
private JButton boutonSuivant = new JButton("Mot Suivant");
private JButton boutonChoisir = new JButton("OK");
private JTextField txtMot = new JTextField(15);
private JTextField txtIndice = new JTextField(30);
private String choixMot;
private String choixIndice;
private ObjectInputStream entree;

public WordReader() {

super("Choissisez le mot de votre adversaire");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

FlowLayout flo = new FlowLayout();
setLayout(flo);
add(txtMot);
add(txtIndice);
add(boutonSuivant);
add(boutonChoisir);

setSize(350,150);
setVisible(true);

try
{
JFileChooser choixDeFichier = new JFileChooser();
choixDeFichier.setFileSelectionMode(JFileChooser.FILES_ONLY);

int resultat = choixDeFichier.showOpenDialog(this);

if (resultat == JFileChooser.CANCEL_OPTION)
return;


File Words1 = choixDeFichier.getSelectedFile();

entree = new ObjectInputStream(new FileInputStream(Words1));

}
catch (IOException ioexception)
{
JOptionPane.showMessageDialog(this,ioexception); //exception ici
}
LireMot();
}


public void ajouterMot()
{
try
{

WordReader word;
String valeursChamps[]= getValeursChamps();

word = new WordReader(valeursChamps[0], valeursChamps[1]);
sortie.writeObject(word);
}
catch(IOException ioException)
{

JOptionPane.showMessageDialog(this,ioException);
}
}
public void LireMot()
{
WordReader myWordReader;

try
{

myWordReader = (WordReader)entree.readObject();

String valeurs[] = { String.valueOf(myWordReader.getMot()),myWordReader.getIndice()};
setValeursChamps(valeurs);
}
catch(EOFException endOfFileException)
{
JOptionPane.showMessageDialog(this,"Fin du fichier");
}
catch (IOException ioException)
{
JOptionPane.showMessageDialog(this,"Impossible de lire le fichier");
}
catch (ClassNotFoundException classNotFoundException)
{
JOptionPane.showMessageDialog(this,classNotFoundException);
}
}


public WordReader(String mot,String indice)
{
setMot(mot);
setIndice(indice);
}

public void setMot(String mot)
{
choixMot = mot;
}

public void setIndice(String indice)
{
choixIndice = indice;
}

public String getMot()
{
return choixMot;
}

public String getIndice()
{
return choixIndice;
}

public void setValeursChamps(String chaines[])
{


for (int compteur = 0; compteur <2; compteur++)
{
txtMot.setText(chaines[compteur]);
txtIndice.setText(chaines[compteur+1]);
}
}

public String[] getValeursChamps()
{
String valeurs[] = new String[2];

for(int compteur = 0; compteur < 2; compteur++)
{
valeurs[compteur] = txtMot.getText();
valeurs[compteur] = txtIndice.getText();
}
return valeurs;
}
public static void main (String args[])
{
WordReader wrd = new WordReader();
// LogIn login = new LogIn();
}



}

1 réponse

benmor Messages postés 49 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 27 novembre 2011 9
29 mai 2010 à 08:54
Bonjour,

Je ne pense pas que ton fichier soit valide.

Si tu utilise ObjectInputStream, c'est normalement pour relire un fichier écrit avec ObjectOutputStream. Je ne pense pas que ce soit ton cas?

Essaie d'écrire ton objet WordReader avec ObjectOutputStream, je pense que le fichier n'est pas lisible sous la forme d'un txt.

Benoit.
0
Rejoignez-nous