Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
kaskinho

erro na compilaçao

Recommended Posts

kaskinho

estou a realizar um projecto mas qd corro da o erro:

Exception in thread "main" java.io.StreamCorruptedException: invalid stream header: 746F7069

        at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:783)

        at java.io.ObjectInputStream.<init>(ObjectInputStream.java:280)

        at pprog_1050057.Menu.<init>(Menu.java:75)

        at pprog_1050057.Main.main(Main.java:22)

Java Result: 1

ja tentei ver a que se referia mas n encontro nd

alguem sabe? 😡


Sandra Monteiro

Share this post


Link to post
Share on other sites
Knitter

De que forma é que estás a usar streams? Estás a ler de um ficheiro ou de algum outro lado?

Podes colocar código de leitura e o código identificado no erro, Menu.java, linha 75. Tenta dar mais linhas, mas esta seria conveniente.

Share this post


Link to post
Share on other sites
kaskinho

eu nao percebo nd disto

mas o menu é:

package pprog_1050057;

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Container;

import java.awt.FlowLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

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 java.security.Principal;

import java.util.ArrayList;

import java.util.logging.Level;

import java.util.logging.Logger;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import pprog_1050057.Pergunta;

import pprog_1050057.Resposta;

import pprog_1050057.Topico;

public class Menu extends JFrame {

JPanel p1=new JPanel();

JPanel p2=new JPanel();

JPanel p3=new JPanel();

JButton b1= new JButton("Inserir pergunta");

JButton b2= new JButton("Realizar teste");

JButton b3= new JButton("Sair");

ArrayList<Topico> topicos=new <Topico>ArrayList();

ArrayList<Pergunta> perg=new <Pergunta>ArrayList();

ArrayList<Resposta> resp=new <Resposta>ArrayList();

public Menu () throws FileNotFoundException, IOException, ClassNotFoundException

{

    super("MENU PRINCIPAL");

    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//fecha na cruz

    Container c=getContentPane();

    c.setBackground(Color.BLUE);

    c.setLayout(new BorderLayout());

    //criaçao dos botaos, definiçao do evento de cada botao

    b1.addActionListener(new Botao());

    b2.addActionListener(new Botao());

    b3.addActionListener(new Botao());

    //layout do painel e adicao de botao ao painel

    p1.setLayout(new FlowLayout(FlowLayout.CENTER,0,30));

    p2.setLayout(new FlowLayout(FlowLayout.CENTER,0,30));

    p3.setLayout(new FlowLayout(FlowLayout.CENTER,0,30));

    p1.add(b1);

    p2.add(b2);

    p3.add(b3);

    c.add(p1, BorderLayout.NORTH);

    c.add(p2, BorderLayout.CENTER);

    c.add(p3, BorderLayout.SOUTH);

    //codigo para ir buscar informaçao aos ficheiros

    ObjectInputStream array1= new ObjectInputStream(new FileInputStream("topico.txt"));

    topicos=(ArrayList<Topico>)array1.readObject();

    array1.close();

    ObjectInputStream array2= new ObjectInputStream(new FileInputStream("pergunta.txt"));

    perg=(ArrayList<Pergunta>)array2.readObject();

    array2.close();

  ObjectInputStream array3= new ObjectInputStream(new FileInputStream("resposta.txt"));

    resp=(ArrayList<Resposta>)array3.readObject();

    array3.close();

    setSize(350,250);//tamanho da janela

    setLocation(500,250);//localizaçao janela proincipal

    setVisible(true);

}

private class Botao implements ActionListener

{

        private ObjectOutputStream out3;

        public void actionPerformed(ActionEvent e) {

            if( e.getSource() == b1 ) {

                inserir_pergunta ip = new inserir_pergunta(topicos, perg, resp);

            }

            if( e.getSource() == b2 ) {

                if((criarTeste(topicos))==0)

                            JOptionPane.showMessageDialog(null,"O teste nao foi criado!" +

                                    "","ERRO", JOptionPane.ERROR_MESSAGE);

            }

            if( e.getSource() == b3 ) {

                ObjectOutputStream out1 = null;

                try {

                    out1 = new ObjectOutputStream(new FileOutputStream("topico.txt"));

                    out1.writeObject(topicos);

                    out1.close();

                    ObjectOutputStream out2 = new ObjectOutputStream(new FileOutputStream("pergunta.txt"));

                    out2.writeObject(perg);

                    out2.close();

                    out3 = new ObjectOutputStream(new FileOutputStream("resposta.txt"));

                    out3.writeObject(resp);

                    out3.close();

                    dispose();

                    JOptionPane.showMessageDialog(null, "Obrigado por " + "REalizar este teste!", "ADEUS", JOptionPane.INFORMATION_MESSAGE);

                    System.exit(0);

                } catch (IOException ex) {

                    Logger.getLogger(Menu.class.getName()).log(Level.SEVERE, null, ex);

                } finally {

                    try {

                        out1.close();

                    } catch (IOException ex) {

                        Logger.getLogger(Menu.class.getName()).log(Level.SEVERE, null, ex);

                    }

                }

            }

        }

}

        private int criarTeste(ArrayList<Topico> topicos)

        {

            String op=null, nome=null;

            nome=JOptionPane.showInputDialog("nome do topico: \n");

            int i = 0;

          do{

              op=JOptionPane.showInputDialog("para sair escreva exit \n");

              if(op.equals("exit"))

                  return 0;

        }while(i==0);

            return 1;

    }

}


Sandra Monteiro

Share this post


Link to post
Share on other sites
Knitter

Coloca o código utilizando as tags de code, incluindo a opção para Java, e tentar organizar isso melhor, remover espaços a mais e linhas vazias que só dificultam a leitura. Quando é assim tanto código o melhor é utilizares o pastebin do P@P e colocares o link em vez de colares todo esse código.

Sem números de linhas não sei qual é a linha que está indicada nas mensagens de erro, e não vou contar uma a um :D , mas à primeira vista diria que os ficheiros que estás a tentar ler não contém dados que possam ser lidos como objectos. Tens a certeza que os dados foram guardados?

Estás a escrever para um txt, mas atenção que os dados não são texto, se estás a usar a serialização padrão não ficam guardados como texto. Existem algumas falhas nesse código de interface mas não devem afectar a leitura e escrita dos dados, coisas como dispose() de um botão, que não fazem sentido, ainda por cima seguidas de código, o dispose() deve ser a última coisa a chamar já que se vão libertar recursos.

Share this post


Link to post
Share on other sites
kaskinho
package pprog_1050057;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
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 java.security.Principal;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import pprog_1050057.Pergunta;
import pprog_1050057.Resposta;
import pprog_1050057.Topico;


public class Menu extends JFrame {

JPanel p1=new JPanel();
JPanel p2=new JPanel();
JPanel p3=new JPanel();


JButton b1= new JButton("Inserir pergunta");
JButton b2= new JButton("Realizar teste");
JButton b3= new JButton("Sair");

ArrayList<Topico> topicos=new <Topico>ArrayList();
ArrayList<Pergunta> perg=new <Pergunta>ArrayList();
ArrayList<Resposta> resp=new <Resposta>ArrayList();



public Menu () throws FileNotFoundException, IOException, ClassNotFoundException
{
    super("MENU PRINCIPAL");
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//fecha na cruz
    Container c=getContentPane();
    c.setBackground(Color.BLUE);
    c.setLayout(new BorderLayout());
    //criaçao dos botaos, definiçao do evento de cada botao
    b1.addActionListener(new Botao());
    b2.addActionListener(new Botao());
    b3.addActionListener(new Botao());

    //layout do painel e adicao de botao ao painel

    p1.setLayout(new FlowLayout(FlowLayout.CENTER,0,30));
    p2.setLayout(new FlowLayout(FlowLayout.CENTER,0,30));
    p3.setLayout(new FlowLayout(FlowLayout.CENTER,0,30));

    p1.add(b1);
    p2.add(b2);
    p3.add(b3);

    c.add(p1, BorderLayout.NORTH);
    c.add(p2, BorderLayout.CENTER);
    c.add(p3, BorderLayout.SOUTH);
    //codigo para ir buscar informaçao aos ficheiros
    ObjectInputStream array1= new ObjectInputStream(new FileInputStream("topico.txt"));
    topicos=(ArrayList<Topico>)array1.readObject();
    array1.close();

    ObjectInputStream array2= new ObjectInputStream(new FileInputStream("pergunta.txt"));
    perg=(ArrayList<Pergunta>)array2.readObject();
    array2.close();


   ObjectInputStream array3= new ObjectInputStream(new FileInputStream("resposta.txt"));
    resp=(ArrayList<Resposta>)array3.readObject();
    array3.close();

    setSize(350,250);//tamanho da janela
    setLocation(500,250);//localizaçao janela proincipal
    setVisible(true);
}



private class Botao implements ActionListener
{
        private ObjectOutputStream out3;
        public void actionPerformed(ActionEvent e) {

            if( e.getSource() == b1 ) {

                inserir_pergunta ip = new inserir_pergunta(topicos, perg, resp);


            }
            if( e.getSource() == b2 ) {

                if((criarTeste(topicos))==0)
                            JOptionPane.showMessageDialog(null,"O teste nao foi criado!" +
                                    "","ERRO", JOptionPane.ERROR_MESSAGE);

            }

            if( e.getSource() == b3 ) {

                ObjectOutputStream out1 = null;
                try {
                    out1 = new ObjectOutputStream(new FileOutputStream("topico.txt"));
                    out1.writeObject(topicos);
                    out1.close();
                    ObjectOutputStream out2 = new ObjectOutputStream(new FileOutputStream("pergunta.txt"));
                    out2.writeObject(perg);
                    out2.close();
                    out3 = new ObjectOutputStream(new FileOutputStream("resposta.txt"));
                    out3.writeObject(resp);
                    out3.close();

                    dispose();

                    JOptionPane.showMessageDialog(null, "Obrigado por " + "REalizar este teste!", "ADEUS", JOptionPane.INFORMATION_MESSAGE);
                    System.exit(0);
                } catch (IOException ex) {
                    Logger.getLogger(Menu.class.getName()).log(Level.SEVERE, null, ex);
                } finally {
                    try {
                        out1.close();
                    } catch (IOException ex) {
                        Logger.getLogger(Menu.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            }

        }
}

        private int criarTeste(ArrayList<Topico> topicos)

        {
            String op=null, nome=null;
            nome=JOptionPane.showInputDialog("nome do topico: \n");
            int i = 0;

          do{
              op=JOptionPane.showInputDialog("para sair escreva exit \n");
              if(op.equals("exit"))
                  return 0;
        }while(i==0);

            return 1;
    }

} 


Sandra Monteiro

Share this post


Link to post
Share on other sites
Knitter

Não querendo ser chato :D , podes editar tópicos em vez de responderes com um novo tópico, não precisas de ter colocado um novo tópico com o código, podias simplesmente ter editado o anterior.

Já agora, vê os tutoriais da wiki do P@P, fala lá sobre serialização e apresenta exemplos, bem como links para mais informação.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.