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

bloodstein

Erro ao abri um ficheiro para leitura

Mensagens Recomendadas

bloodstein

Boas

dá-me este erro ao tentar abrir um ficheiro alguem me pode ajudar ja andei as voltas a procura de resposta

Exception in thread "main" java.io.InvalidClassException: motor.Tipo1; local class incompatible: stream classdesc serialVersionUID = -3424471515774081094, local class serialVersionUID = 6362323227257204768

        at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:562)

        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1583)

        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)

        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)

        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)

        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)

        at motor.Tipo1.readTipo1(Tipo1.java:33)

        at motor.Main.main(Main.java:29)

Java Result: 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bloodstein

é um programa pra testes no computador com 3 tipos de perguntas pra ja so estou a testar um tenho uma classe pergunta e uma tipo1, a tipo1 extende da pergunta no main consegui escrever dados la mas ao tentar abrir pra carregar os dados da-me esse erro!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Knitter

O erro diz-te que a classe que gravaste é diferente da classe que estás a tentar ler, isto é, alteraste a classe depois de teres serializado um objecto dessa classe. Se foi isso mesmo que aconteceu os dados serializados estão, virtualmente, perdidos. Podes tentar alterar/definir um UID igual ao que foi gravado.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bloodstein

sim alterei a classe!

tentei criar novamente o ficheiro so que agora ao ler dá-me isto:

Exception in thread "main" java.io.InvalidClassException: motor.Tipo1; motor.Tipo1; no valid constructor

        at java.io.ObjectStreamClass.checkDeserialize(ObjectStreamClass.java:713)

        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1733)

        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)

        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)

        at motor.Tipo1.readTipo1(Tipo1.java:33)

        at motor.Main.main(Main.java:29)

Caused by: java.io.InvalidClassException: motor.Tipo1; no valid constructor

        at java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:471)

        at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:310)

        at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:547)

        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1583)

        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)

        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)

        ... 4 more

Java Result: 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Knitter

Se alteraste a classe, então os dados gravados não podem ser recuperados, a não ser que consigas colocar a classe como estava na altura em que o objecto foi serializado. A regra base da serialização é que não podes alterar as classes de objectos que já foram serializados.

Quanto ao novo erro, como diz na mensagem, não tens o construtor que é necessário. Não sabendo como é o código estou a adivinhar mas suponho que te falte um construtor sem argumentos.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bloodstein

na classe tenho dois construtores um com os argumentos todos direitinhos e um sem argumentos e o erro persiste

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Knitter

E as superclasses são serializaveis ou têm um construtor sem argumentos?

Se estás a usar a interface Serializable, a classe que a implementa não precisa de um construtor sem argumentos mas, devido ao processo de deserialização, as suas super-classes têm também de implementar Serializable ou então ter um construtor sem argumentos.

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.