gravação em arquivo

16 respostas
D

Bom Dia!

Sou Novo por aqui, e ainda bem "verde" em programação JAVA, estou tendo problema com gravação de arquivos... segue o meu codigo:

package cadastrovector;

import javax.swing.*;
import java.util.Vector;

public class CadastroVector {

    public static void main(String[] args) {
        String menu[] = {"Cria Empregado", "Insere Dependente", "Modifica Salario","Reajusta Salario","Visualiza Dados","Sair do Programa"};
        int comando = 0;
        int i = 0;
        String nome = "";
        String telefone = "";
        String endereco = "";
        String salario = "";
        String dependente;
        double doubleSalario = 0;
        cadastro dados = new cadastro();

        try{
        dados.recuperaCadastro();
        } catch (Exception exc) {
        System.out.println("Erro ao abrir o arquivo.");
        }
        
        while ((comando = JOptionPane.showOptionDialog(null, "Escolha uma opção", "Programa Cadastro Empregado", 
        JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, null, menu, null)) != 5) {
            switch (comando) {
                
                case 0:
                    try{
                    nome = JOptionPane.showInputDialog("Digite o nome: ");
                    telefone = JOptionPane.showInputDialog("Digite o telefone: ");
                    endereco = JOptionPane.showInputDialog("Digite o endereco: ");
                    salario = JOptionPane.showInputDialog("Digite o salario: ");
                    doubleSalario = Double.parseDouble(salario);
                    dados.addEmpregado(nome, telefone, endereco, doubleSalario); 
                    }catch (Exception exc){
                        JOptionPane.showMessageDialog(null, exc.getMessage(), "Error",  JOptionPane.ERROR_MESSAGE); 
                    }
                    break;
                    
                case 1:           
                    nome = JOptionPane.showInputDialog("Informe nome do empregado:");
                    if (dados.verificaNome(nome)){
                        dependente = JOptionPane.showInputDialog("Informe nome do dependente:");
                        dados.recebeDependente(dependente,nome);
                    }
                    break;
                    
                case 2:         
                    nome = JOptionPane.showInputDialog("Insira o nome do Empregado: ");
                    if (dados.verificaNome(nome)){
                        salario = JOptionPane.showInputDialog("Informe novo salario:");
                        doubleSalario = Double.parseDouble(salario);
                        dados.modificaSalario(nome, doubleSalario);
                    }else{
                        JOptionPane.showMessageDialog(null,"Empregado nao encontrado");
                    }
                    break;
                    
                case 3:
                    salario = JOptionPane.showInputDialog("Digite a porcentagem de aumento:");
                    doubleSalario = Double.parseDouble(salario);
                    dados.reajusteEmpregados(doubleSalario);
                    break;
                    
                case 4:
                    nome = JOptionPane.showInputDialog("Insira o nome do Empregado");
                    dados.mostraEmpregado(nome);
                    break;
                    
                case 5:                
                    System.exit(1);
            }
        }
    }
}
package cadastrovector;

import java.util.*;
import javax.swing.*;
import java.io.*;

public class cadastro {

    private final String arquivo = "empregados.dat";
    Vector<empregado> listaEmpregados = new Vector<empregado>();
    
    public void addEmpregado(String nome, String fone, String endereco, double salario) throws Exception {
        try{
                listaEmpregados.add(new empregado(nome, fone, endereco, salario));
                JOptionPane.showMessageDialog(null,"Empregado cadastrado com sucesso!");
                gravaCadastro();
            }
        catch(ArrayIndexOutOfBoundsException exception){
            System.out.println("Limite de Empregados atingido" + exception);           
        }
    }
    
    
        
    public boolean verificaNome(String nome){
        int i;
        for (i=0;i<listaEmpregados.size();i++){
        empregado c = (empregado) listaEmpregados.get(i);
        if (nome.equalsIgnoreCase(c.nomeEmpregado)){
            return true;
        }
    }
        return false;
    }
     
    
    public void reajusteEmpregados (Double porcentagem){
        empregado e;
        for (int i = 0; i >< listaEmpregados.size(); i++) {
            e = listaEmpregados.get(i);
            e.salarioEmpregado = e.salarioEmpregado + (((e.salarioEmpregado)/100)*porcentagem);
            listaEmpregados.set(i, e);
        }
        JOptionPane.showMessageDialog(null, "Salarios reajustados com Sucesso!");
    }
    
        
    public void recebeDependente(String dependente, String nome){
        int i;

        for (i=0;i<listaEmpregados.size();i++){
            empregado c;
            c=listaEmpregados.get(i);
            if (nome.equalsIgnoreCase(c.nomeEmpregado)){
               c.addDependente(dependente);
            }
    }
    }
        
            
    public boolean modificaSalario (String nome, double salario){
        
        empregado e;
        for(int i = 0; i><=listaEmpregados.size(); i++){
            e = listaEmpregados.get(i);
            if(e.nomeEmpregado.equalsIgnoreCase(nome)){
                e.salarioEmpregado = salario;
                listaEmpregados.set(i, e);
                return true;
            }
            }
        return false;
        }
    
     
    public void aaamostraEmpregado(String nome){     
        int i;  
        JTextArea saidaTela = new JTextArea(25,25);  
        for (i=0;i<listaEmpregados.size();i++){
            empregado c;
            c = listaEmpregados.get(i);
            saidaTela.append("["+(i+1)+"]" + " NOME: " + c.nomeEmpregado +     
                    "\n" + "TELEFONE: " + c.foneEmpregado +     
                    "\n" + "ENDERECO: " + c.enderecoEmpregado +  
                    "\n" + "SALARIO: " + c.salarioEmpregado +         
                    "\n" + "DEPENDENTES: " + c.mostraDependentes() + "\n\n\n");
        }       
        JOptionPane.showMessageDialog(null,saidaTela);
    }
    
    
        
    public void mostraEmpregado(String nome){     
        int i;  
        JTextArea saidaTela = new JTextArea(25,25);  
        for (i=0;i<listaEmpregados.size();i++){
            empregado c;
            c = listaEmpregados.get(i);
            if (c.nomeEmpregado.equalsIgnoreCase(nome)){
            saidaTela.append("["+(i+1)+"]" + " NOME: " + c.nomeEmpregado +     
                    "\n" + "TELEFONE: " + c.foneEmpregado +     
                    "\n" + "ENDERECO: " + c.enderecoEmpregado +  
                    "\n" + "SALARIO: " + c.salarioEmpregado +         
                    "\n" + "DEPENDENTES: " + c.mostraDependentes());
            }
        }       
        JOptionPane.showMessageDialog(null,saidaTela);
    }


  public void gravaCadastro() throws Exception {
    FileOutputStream objFileOS = new FileOutputStream(arquivo);
    ObjectOutputStream objOS = new ObjectOutputStream(objFileOS);
    objOS.writeObject(listaEmpregados);
    objOS.flush();
    objOS.close();
  }
  
  public void recuperaCadastro() throws Exception {
    File objFile = new File(arquivo);
    if (objFile.exists()) {
      FileInputStream objFileIS = new FileInputStream(arquivo);
      ObjectInputStream objIS = new ObjectInputStream(objFileIS);
      listaEmpregados = (Vector)objIS.readObject();
      objIS.close();
    }
  }
}
package cadastrovector;

public class dependente{
    String nomeDependente = "";
    
    public dependente(String nomeDependente){
    this.nomeDependente = nomeDependente;
}
}
package cadastrovector;

import java.util.Vector;
import javax.swing.*;

public class empregado extends cadastro {
    String nomeEmpregado;
    String foneEmpregado;
    String enderecoEmpregado;
    double salarioEmpregado;
    Vector><dependente> listaDependentes = new Vector<dependente>();
    
    
    public empregado(String nome, String telefone, String endereco, Double salario){
        this.nomeEmpregado = nome;
        this.foneEmpregado = telefone;
        this.enderecoEmpregado = endereco;
        this.salarioEmpregado = salario;
    }
         
    public void addDependente (String dependente){
        listaDependentes.add(new dependente (dependente));

    }
                             
    public String mostraDependentes(){
        int i;
        String stringDependentes = "";
        for (i=0;i<listaDependentes.size();i++){
            dependente d = (dependente) listaDependentes.get(i);
            stringDependentes += "\n" + d.nomeDependente + "; ";
       }
        return stringDependentes;
   }
}

me retorna erro logo ao adicionar um empregado...

Alguma dica?

Agradeço desde ja!

>

16 Respostas

nel

Sim,

substitua seu Vector por uma List e poste o stackstrace.
Sem analisarmos o erro é complicado.

D

Nossa que rapido O.o

blz, vou fazer isso, nao tem problema eu substituir por list, corrigir o propblema e depois voltar pra vector? é que ´pe trabalho de aula, e é exigido ser com vector.

ele mostra isso na saida:

run:
Erro ao abrir o arquivo.
CONSTRUÍDO COM SUCESSO (tempo total: 26 segundos)

e sempre ao tentar adicionar um empregado ele mostra a mensagem “ERRO”

Obrigado!

nel

Não sei porque um professor exige que use Vector. É desatualizado e há API´s muito melhores atualmente, mas enfim.
Um detalhe, não dê nome a classes que iniciem com letra minuscula, é totalmente fora da convenção Java.

Sobre o seu erro, provavelmente não está encontrando o arquivo. Altere isso:

try{ dados.recuperaCadastro(); } catch (Exception exc) { System.out.println("Erro ao abrir o arquivo."); }

Para:

try{ dados.recuperaCadastro(); } catch (Exception exc) { System.out.println("Erro ao abrir o arquivo. " + e.printStackTrace()); }

Dessa forma vai apresentar todo o erro e não algo genérico.

D

nel:
Não sei porque um professor exige que use Vector. É desatualizado e há API´s muito melhores atualmente, mas enfim.
Um detalhe, não dê nome a classes que iniciem com letra minuscula, é totalmente fora da convenção Java.

Sobre o seu erro, provavelmente não está encontrando o arquivo. Altere isso:

try{ dados.recuperaCadastro(); } catch (Exception exc) { System.out.println("Erro ao abrir o arquivo."); }

Para:

try{ dados.recuperaCadastro(); } catch (Exception exc) { System.out.println("Erro ao abrir o arquivo. " + e.printStackTrace()); }

Dessa forma vai apresentar todo o erro e não algo genérico.

realmente, meu professor é bem trovador, fazendo a gente usar vector, embora alguns colegas de aula, com conhecimento um pouco mais avançado, tenham já alertado ele sobre API’s mais eficientes…

substituí, retornou isso:

run:

Exception in thread main java.lang.RuntimeException: Uncompilable source code - Erroneous tree type: 

at cadastrovector.CadastroVector.main(CadastroVector.java:23)

Java Result: 1

CONSTRUÍDO COM SUCESSO (tempo total: 3 segundos)

acho que é por causa da variável “e” que eu não declarei, de que tipo ela deve ser?

desculpe, como eu disse, estou beeeeeeem verde no java.

igor_ks

no lugar do e.printStackTrace(), coloca o exc que vem da Exception do catch

e envie novamente o stackTrace

D

com o exc apareceu:

run:
Erro ao abrir o arquivo. java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: cadastrovector.empregado
CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo)

estou tendo dificuldades com o printStackTrace…

D

Ae!!! Acho que consegui!!

run:

Erro ao abrir o arquivo. java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: cadastrovector.empregado

java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: cadastrovector.empregado

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

at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1685)

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

at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1964)

at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1888)

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

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

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

at cadastrovector.cadastro.recuperaCadastro(cadastro.java:124)

at cadastrovector.CadastroVector.main(CadastroVector.java:23)

Caused by: java.io.NotSerializableException: cadastrovector.empregado

at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180)

at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1362)

at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1170)

at java.io.ObjectOutputStream.access$300(ObjectOutputStream.java:161)

at java.io.ObjectOutputStream$PutFieldImpl.writeFields(ObjectOutputStream.java:1687)

at java.io.ObjectOutputStream.writeFields(ObjectOutputStream.java:478)

at java.util.Vector.writeObject(Vector.java:1073)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:601)

at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:962)

at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480)

at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)

at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)

at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)

at cadastrovector.cadastro.gravaCadastro(cadastro.java:114)

at cadastrovector.cadastro.addEmpregado(cadastro.java:16)

at cadastrovector.CadastroVector.main(CadastroVector.java:37)

CONSTRUÍDO COM SUCESSO (tempo total: 24 segundos)
nel

Faça sua classe “Empregado” implementar a interface Serializable.

D

deste jeito?

package cadastrovector;

import java.util.*;
import java.io.Serializable;

public class empregado extends cadastro {
    String nomeEmpregado;
    String foneEmpregado;
    String enderecoEmpregado;
    double salarioEmpregado;
    Vector<dependente> listaDependentes = new Vector<dependente>();
    
    
    public empregado(String nome, String telefone, String endereco, Double salario){
        this.nomeEmpregado = nome;
        this.foneEmpregado = telefone;
        this.enderecoEmpregado = endereco;
        this.salarioEmpregado = salario;
    }
         
    public void addDependente (String dependente){
        listaDependentes.add(new dependente (dependente));

    }
                             
    public String mostraDependentes(){
        int i;
        String stringDependentes = "";
        for (i=0;i<listaDependentes.size();i++){
            dependente d = (dependente) listaDependentes.get(i);
            stringDependentes += "\n" + d.nomeDependente + "; ";
       }
        return stringDependentes;
   }
}

o stack ficou assim:

run:

Erro ao abrir o arquivo. java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: cadastrovector.empregado

java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: cadastrovector.empregado

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

at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1685)

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

at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1964)

at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1888)

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

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

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

at cadastrovector.cadastro.recuperaCadastro(cadastro.java:124)

at cadastrovector.CadastroVector.main(CadastroVector.java:23)

Caused by: java.io.NotSerializableException: cadastrovector.empregado

at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180)

at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1362)

at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1170)

at java.io.ObjectOutputStream.access$300(ObjectOutputStream.java:161)

at java.io.ObjectOutputStream$PutFieldImpl.writeFields(ObjectOutputStream.java:1687)

at java.io.ObjectOutputStream.writeFields(ObjectOutputStream.java:478)

at java.util.Vector.writeObject(Vector.java:1073)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:601)

at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:962)

at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480)

at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)

at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)

at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)

at cadastrovector.cadastro.gravaCadastro(cadastro.java:114)

at cadastrovector.cadastro.addEmpregado(cadastro.java:16)

at cadastrovector.CadastroVector.main(CadastroVector.java:40)

CONSTRUÍDO COM SUCESSO (tempo total: 19 segundos)
nel
duality:
nel:
Faça sua classe "Empregado" implementar a interface Serializable.

deste jeito?

package cadastrovector;

import java.util.*;
import java.io.Serializable;

public class empregado extends cadastro {
    String nomeEmpregado;
    String foneEmpregado;
    String enderecoEmpregado;
    double salarioEmpregado;
    Vector<dependente> listaDependentes = new Vector<dependente>();
    
    
    public empregado(String nome, String telefone, String endereco, Double salario){
        this.nomeEmpregado = nome;
        this.foneEmpregado = telefone;
        this.enderecoEmpregado = endereco;
        this.salarioEmpregado = salario;
    }
         
    public void addDependente (String dependente){
        listaDependentes.add(new dependente (dependente));

    }
                             
    public String mostraDependentes(){
        int i;
        String stringDependentes = "";
        for (i=0;i<listaDependentes.size();i++){
            dependente d = (dependente) listaDependentes.get(i);
            stringDependentes += "\n" + d.nomeDependente + "; ";
       }
        return stringDependentes;
   }
}

o stack ficou assim:

run:
Erro ao abrir o arquivo. java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: cadastrovector.empregado
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: cadastrovector.empregado
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1685)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1341)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1964)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1888)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
at cadastrovector.cadastro.recuperaCadastro(cadastro.java:124)
at cadastrovector.CadastroVector.main(CadastroVector.java:23)
Caused by: java.io.NotSerializableException: cadastrovector.empregado
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180)
at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1362)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1170)
at java.io.ObjectOutputStream.access$300(ObjectOutputStream.java:161)
at java.io.ObjectOutputStream$PutFieldImpl.writeFields(ObjectOutputStream.java:1687)
at java.io.ObjectOutputStream.writeFields(ObjectOutputStream.java:478)
at java.util.Vector.writeObject(Vector.java:1073)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:962)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
at cadastrovector.cadastro.gravaCadastro(cadastro.java:114)
at cadastrovector.cadastro.addEmpregado(cadastro.java:16)
at cadastrovector.CadastroVector.main(CadastroVector.java:40)
CONSTRUÍDO COM SUCESSO (tempo total: 19 segundos)

Cadê a implementação da interface?
Faça isso...

import java.io.Serializable;

public class Empregado extends cadastro implements Serializable {
    private static final long serialVersionUID = 1L;
   // seu código
}
D

Certo!

package cadastrovector;

import java.util.*;
import java.io.Serializable;

public class empregado extends cadastro implements Serializable {
    private static final long serialVersionUID = 1L;
    String nomeEmpregado;
    String foneEmpregado;
    String enderecoEmpregado;
    double salarioEmpregado;
    Vector<dependente> listaDependentes = new Vector<dependente>();
    
    
    public empregado(String nome, String telefone, String endereco, Double salario){
        this.nomeEmpregado = nome;
        this.foneEmpregado = telefone;
        this.enderecoEmpregado = endereco;
        this.salarioEmpregado = salario;
    }
         
    public void addDependente (String dependente){
        listaDependentes.add(new dependente (dependente));

    }
                             
    public String mostraDependentes(){
        int i;
        String stringDependentes = "";
        for (i=0;i<listaDependentes.size();i++){
            dependente d = (dependente) listaDependentes.get(i);
            stringDependentes += "\n" + d.nomeDependente + "; ";
       }
        return stringDependentes;
   }
}
run:

Erro ao abrir o arquivo. java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: cadastrovector.empregado

java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: cadastrovector.empregado

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

at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1685)

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

at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1964)

at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1888)

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

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

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

at cadastrovector.cadastro.recuperaCadastro(cadastro.java:124)

at cadastrovector.CadastroVector.main(CadastroVector.java:23)

Caused by: java.io.NotSerializableException: cadastrovector.empregado

at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180)

at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1362)

at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1170)

at java.io.ObjectOutputStream.access$300(ObjectOutputStream.java:161)

at java.io.ObjectOutputStream$PutFieldImpl.writeFields(ObjectOutputStream.java:1687)

at java.io.ObjectOutputStream.writeFields(ObjectOutputStream.java:478)

at java.util.Vector.writeObject(Vector.java:1073)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:601)

at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:962)

at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480)

at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)

at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)

at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)

at cadastrovector.cadastro.gravaCadastro(cadastro.java:114)

at cadastrovector.cadastro.addEmpregado(cadastro.java:16)

at cadastrovector.CadastroVector.main(CadastroVector.java:40)

CONSTRUÍDO COM SUCESSO (tempo total: 16 segundos)

Muito obrigado por estarem me ajudando!! :smiley: :smiley: :smiley:

nel

Faça o mesmo em sua classe Cadastro.
Será que terei de olhar todo o seu código…

D

implementei o serializable no cadastro e no dependente tambem

package cadastrovector;

import java.util.*;
import javax.swing.*;
import java.io.*;

public class cadastro implements Serializable{
    private static final long serialVersionUID = 1L;

    private final String arquivo = "empregados.dat";
    Vector<empregado> listaEmpregados = new Vector<empregado>();
    
    public void addEmpregado(String nome, String fone, String endereco, double salario) throws Exception {
        try{
                listaEmpregados.add(new empregado(nome, fone, endereco, salario));
                JOptionPane.showMessageDialog(null,"Empregado cadastrado com sucesso!");
                gravaCadastro();
            }
        catch(ArrayIndexOutOfBoundsException exception){
            System.out.println("Limite de Empregados atingido" + exception);           
        }
    }
    
    
        
    public boolean verificaNome(String nome){
        int i;
        for (i=0;i<listaEmpregados.size();i++){
        empregado c = (empregado) listaEmpregados.get(i);
        if (nome.equalsIgnoreCase(c.nomeEmpregado)){
            return true;
        }
    }
        return false;
    }
     
    
    public void reajusteEmpregados (Double porcentagem){
        empregado e;
        for (int i = 0; i < listaEmpregados.size(); i++) {
            e = listaEmpregados.get(i);
            e.salarioEmpregado = e.salarioEmpregado + (((e.salarioEmpregado)/100)*porcentagem);
            listaEmpregados.set(i, e);
        }
        JOptionPane.showMessageDialog(null, "Salarios reajustados com Sucesso!");
    }
    
        
    public void recebeDependente(String dependente, String nome){
        int i;

        for (i=0;i<listaEmpregados.size();i++){
            empregado c;
            c=listaEmpregados.get(i);
            if (nome.equalsIgnoreCase(c.nomeEmpregado)){
               c.addDependente(dependente);
            }
    }
    }
        
            
    public boolean modificaSalario (String nome, double salario){
        
        empregado e;
        for(int i = 0; i<=listaEmpregados.size(); i++){
            e = listaEmpregados.get(i);
            if(e.nomeEmpregado.equalsIgnoreCase(nome)){
                e.salarioEmpregado = salario;
                listaEmpregados.set(i, e);
                return true;
            }
            }
        return false;
        }
    
     
    public void aaamostraEmpregado(String nome){     
        int i;  
        JTextArea saidaTela = new JTextArea(25,25);  
        for (i=0;i<listaEmpregados.size();i++){
            empregado c;
            c = listaEmpregados.get(i);
            saidaTela.append("["+(i+1)+"]" + " NOME: " + c.nomeEmpregado +     
                    "\n" + "TELEFONE: " + c.foneEmpregado +     
                    "\n" + "ENDERECO: " + c.enderecoEmpregado +  
                    "\n" + "SALARIO: " + c.salarioEmpregado +         
                    "\n" + "DEPENDENTES: " + c.mostraDependentes() + "\n\n\n");
        }       
        JOptionPane.showMessageDialog(null,saidaTela);
    }
    
    
        
    public void mostraEmpregado(String nome){     
        int i;  
        JTextArea saidaTela = new JTextArea(25,25);  
        for (i=0;i<listaEmpregados.size();i++){
            empregado c;
            c = listaEmpregados.get(i);
            if (c.nomeEmpregado.equalsIgnoreCase(nome)){
            saidaTela.append("["+(i+1)+"]" + " NOME: " + c.nomeEmpregado +     
                    "\n" + "TELEFONE: " + c.foneEmpregado +     
                    "\n" + "ENDERECO: " + c.enderecoEmpregado +  
                    "\n" + "SALARIO: " + c.salarioEmpregado +         
                    "\n" + "DEPENDENTES: " + c.mostraDependentes());
            }
        }       
        JOptionPane.showMessageDialog(null,saidaTela);
    }


  public void gravaCadastro() throws Exception {
    FileOutputStream objFileOS = new FileOutputStream(arquivo);
    ObjectOutputStream objOS = new ObjectOutputStream(objFileOS);
    objOS.writeObject(listaEmpregados);
    objOS.flush();
    objOS.close();
  }
  
  public void recuperaCadastro() throws Exception {
    File objFile = new File(arquivo);
    if (objFile.exists()) {
      FileInputStream objFileIS = new FileInputStream(arquivo);
      ObjectInputStream objIS = new ObjectInputStream(objFileIS);
      listaEmpregados = (Vector)objIS.readObject();
      objIS.close();
    }
  }
}

run:
Erro ao abrir o arquivo. java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: cadastrovector.dependente
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: cadastrovector.dependente
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1685)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1341)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1964)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1888)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1964)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1888)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1685)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1341)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1964)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1888)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
at cadastrovector.cadastro.recuperaCadastro(cadastro.java:125)
at cadastrovector.CadastroVector.main(CadastroVector.java:23)
Caused by: java.io.NotSerializableException: cadastrovector.dependente
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180)
at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1362)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1170)
at java.io.ObjectOutputStream.access$300(ObjectOutputStream.java:161)
at java.io.ObjectOutputStream$PutFieldImpl.writeFields(ObjectOutputStream.java:1687)
at java.io.ObjectOutputStream.writeFields(ObjectOutputStream.java:478)
at java.util.Vector.writeObject(Vector.java:1073)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:962)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1493)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1362)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1170)
at java.io.ObjectOutputStream.access$300(ObjectOutputStream.java:161)
at java.io.ObjectOutputStream$PutFieldImpl.writeFields(ObjectOutputStream.java:1687)
at java.io.ObjectOutputStream.writeFields(ObjectOutputStream.java:478)
at java.util.Vector.writeObject(Vector.java:1073)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:962)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
at cadastrovector.cadastro.gravaCadastro(cadastro.java:115)
at cadastrovector.cadastro.addEmpregado(cadastro.java:17)
at cadastrovector.CadastroVector.main(CadastroVector.java:40)
CONSTRUÍDO COM SUCESSO (tempo total: 53 segundos)

nel

Oi!

ObjectInputStream objIS = new ObjectInputStream(objFileIS); listaEmpregados = (Vector)objIS.readObject();

O método readObject() somente aceita objetos Serializados.
O objeto Vector não é uma classe Serializada, logo, gera a exceção que testemunha.

Creio que necessite alterar o seu código ou pesquisar para ver como podes realizar a conversão desejada.
Abraços.

D

nel:
Oi!

ObjectInputStream objIS = new ObjectInputStream(objFileIS); listaEmpregados = (Vector)objIS.readObject();

O método readObject() somente aceita objetos Serializados.
O objeto Vector não é uma classe Serializada, logo, gera a exceção que testemunha.

Creio que necessite alterar o seu código ou pesquisar para ver como podes realizar a conversão desejada.
Abraços.

Caramba então é isso…
certo, vou ter que dar um jeito de converter mesmo, porque fomos “melhorando” o código durante as aulas… antes de ficar assim usava-mos vetores mesmo, então veio essa classe Vector e agora ele pediu pra implementar a gravação em arquivo…

muito obrigado por me dar uma luz! Já não sabia mais o que fazer!

Grande abraço!!

D

double post

Criado 25 de outubro de 2011
Ultima resposta 25 de out. de 2011
Respostas 16
Participantes 3