tengo un problema conceptual sobre este error: Exception in thread “main” java.lang.ClassCastException: java.lang.String cannot be cast

publicado por: Anonymous

Buenas tardes, en un código que ando elaborando de manera empírica me encuentro con un fallo conceptual por parte mía y no sé como poderlo solucionar, el error es el siguiente:

Exception in thread “main” java.lang.ClassCastException: java.lang.String cannot be cast to prodemios.proceso at prodemios.PrincipalES.main(PrincipalES.java:32

Mi código es el siguiente:

package prodemios;

import java.util.*;

public class PrincipalES {
    static String contraseña;
    static String usuario;
    static int validacion;
    static int puntosg;
    static int puntosf;
    static boolean encendido=true;

    public static void main (String[] args) {
        Scanner leer=new Scanner(System.in);

        System.out.println("Si es usuario oprima 1, si es servidor oprima 2");
        validacion=leer.nextInt();

        switch(validacion){
        case 1:
            usuario();
            break;
        case 2:
            validar();
            break;
        }

        proceso user;
        serializador s = new serializador();
        user=(proceso)s.cargarObjeto("prodemios.dat");
        System.out.println(user.getNombre());
        System.out.println(user.getPuntos());
        //guardaD.
    }

    public static void validar(){
        Scanner leer=new Scanner(System.in);
        BaseDatos BD=new BaseDatos();
        System.out.println("ingresa la contraseña");
        contraseña=leer.nextLine();
        if(contraseña.equals("prodemios")){
            BD.servidor();    
        }
        else{System.out.println("error en la contraseña");}
    }

    public static void usuario(){
        Scanner leer=new Scanner(System.in);
        usuario usu= new usuario();
        System.out.println("bienvenido al prode, oprime A si eres usuario nuevonO B si eres usuario antiguo");
        usuario=leer.nextLine();

        if(usuario.equals("a")){    
          usu.usuarionuevo();
        }

        if(usuario.equals("b")){
           usu.usuarioantiguo(); 
        }

        proceso user;
        serializador s = new serializador();
        user=(proceso)s.cargarObjeto("prodemios.dat");
        System.out.println(user.getNombre());
        System.out.println(user.getPuntos());
    }
}

package prodemios;

import java.util.*;

public class BaseDatos {
    private int usuariosPuntos;
    private String usuariosNombre="";
    private int i;
    private int cantidad;
    private int cont;

    public void servidor() {
        Scanner leer = new Scanner(System.in);

        System.out.println("ingresa cantidad de usuarios");
        cantidad=leer.nextInt();

        proceso datos[]=new proceso[cantidad];

        for(i=0;i<=datos.length-1;i++){
            cont=cont+1;
            System.out.println("ingresa el nombre del usuario numero "+cont);
            usuariosNombre=leer.next();

            datos[i]=new proceso(usuariosNombre, usuariosPuntos);
        }

        cont=0;
        for(i=0;i<=datos.length-1;i++){
            cont=cont+1;
            System.out.println("ingresa los puntos del usuario numero "+cont);
            usuariosPuntos=leer.nextInt();

            datos[i]=new proceso(usuariosNombre, usuariosPuntos);
        }
    }
}

package prodemios;

import java.util.Scanner;

public class usuario {
    private String nombre;
    private int puntosgeneral;
    private int puntosfecha;

    public void usuarionuevo(){
        Scanner leer=new Scanner(System.in);

        System.out.println("ingresa tu nombre");
        nombre=leer.next();

        System.out.println("ingresa tus puntos realizados");
        puntosgeneral=leer.nextInt();
        proceso pr = new proceso(nombre,puntosgeneral);
    }

    public void usuarioantiguo(){
        Scanner leer=new Scanner(System.in);

        System.out.println("ingresa tus puntos realizados en la fecha");
        puntosfecha=leer.nextInt();
        proceso pr = new proceso(null,puntosfecha);
    }

    public int getPuntosgeneral() {
        return puntosgeneral;
    }

    public void setPuntosgeneral(int puntosgeneral) {
        this.puntosgeneral = puntosgeneral;
    }

    public int getPuntosfecha() {
        return puntosfecha;
    }

    public void setPuntosfecha(int puntosfecha) {
        this.puntosfecha = puntosfecha;
    }
}

package prodemios;

public class proceso {
    private String nombre;
    private int puntos;

    public proceso(){       
        nombre="";
        puntos=0;
    }

    public proceso(String nom,int punt){
        nombre=nom;
        puntos=punt;
        serializador guardaD = new serializador();
        guardaD.guardaObjeto(getNombre(),getPuntos());  
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public int getPuntos() {
        return puntos;
    }

    public void setPuntos(int puntos) {
        this.puntos = puntos;
    }

    //usu.getPuntosgeneral();
    //usu.getPuntosfecha()
}

package prodemios;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class serializador {
    private ObjectInputStream cargarDato;
    private ObjectOutputStream guardarDato;

    public void guardaObjeto(Object nombre, Object puntos ){
        try {
            guardarDato= new ObjectOutputStream(new FileOutputStream("prodemios.dat"));
            guardarDato.writeObject(nombre);
            guardarDato.writeObject(puntos);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public Object cargarObjeto(String nombreArchivo){
        Object retorno = null;
        try {
            cargarDato= new ObjectInputStream(new FileInputStream(nombreArchivo));
            retorno=cargarDato.readObject();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return retorno;
    }
}

La clase proceso es la que recibe los datos de las clases BaseDato o usuario y construye los objetos que van directo al serializador, les agradecería mucho la ayuda, feliz tarde.

solución

user=(proceso)s.cargarObjeto(“prodemios.dat”);

Es el error por lo que ese método devuelve un String y lo intentas convertir en “proceso”. Primero que todo según lo que tengo entendido esa no es la forma adecuada de guardar objetos. Para guardar un objeto lo primero que tiene implementar la clase del objeto que vayas a guardar, es la clase Serializable. Te recomiendo este post http://www.sc.ehu.es/sbweb/fisica/cursoJava/fundamentos/archivos/objetos.htm

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *