Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

kaskinho

erro na compilaçao

Mensagens Recomendadas

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? :rant_01:


Sandra Monteiro

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.