Hi,
I have an error in my code and I don't know why. The error is a java.io.NotSerializationException. The code is:
import java.io.*;
import java.util.Scanner;
public class Venta implements Serializable
{
private static final long serialVersionUID = 1L;
long idv;
int importe;
int unidades;
float precio;
Scanner s=new Scanner(System.in);
Cliente clt=new Cliente();
Almacenamiento alm=new Almacenamiento();
Venta()
{
idv=0;
}
public void escritura_venta(Venta v) throws IOException
{
FileOutputStream filopstream=new FileOutputStream("ventas.dat");
ObjectOutputStream ops = new ObjectOutputStream(filopstream);
try
{
ops.writeObject(v);
}
catch(IOException i)
{
System.err.println("Error al escribir en el fichero");
System.out.println(i);
i.printStackTrace();
}
ops.close();
}
}
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.Serializable;
import java.util.Scanner;
import java.lang.String;
public class Cliente implements Serializable
{
long idc;
String nombre;
String apellidos;
String pago;
int ntarjeta;
Scanner s=new Scanner(System.in);
Cliente()
{
idc=0;
}
public void crear_cliente()
{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader (isr);
try
{
System.out.println("Crear cliente");
idc++;
System.out.println("Nombre");
nombre=br.readLine();
System.out.println("Apellidos");
apellidos=br.readLine();
System.out.println("Forma de pago (efectivo o tarjeta)");
pago=br.readLine();
if (pago.toLowerCase().equals("tarjeta"))
{
System.out.println("Número de tarjeta");
s.nextInt();
}
}
catch (Exception e)
{
System.out.println("Error al leer de teclado");
e.printStackTrace();
System.out.println(e);
}
System.out.println("Cliente creado correctamente");
}
}
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Scanner;
public class Menu
{
Menu()
{
}
public void lectura_venta() throws IOException, ClassNotFoundException
{
Venta v=new Venta();
FileInputStream filipstream=new FileInputStream("ventas.dat");
try (ObjectInputStream ips = new ObjectInputStream(filipstream))
{
v=(Venta)ips.readObject();
}
catch (IOException i)
{
System.err.println("Error al leer del fichero");
System.out.println(i);
}
}
public static void main(String args[]) throws IOException, ClassNotFoundException
{
Menu mn=new Menu();
Venta v=new Venta();
int op=0;
Scanner s=new Scanner(System.in);
Almacenamiento a=new Almacenamiento();
Cliente c=new Cliente();
Musica m=new Musica();
do
{
System.out.println("Menú:");
System.out.println("1. Crear Venta");
System.out.println("2. Crear Música");
System.out.println("3. Listar Ventas");
System.out.println("4. Listar Música");
}
}
while(op!=4);
}
}
When I run this code I displayed the error:
Error al escribir en el fichero
java.io.NotSerializableException: java.util.Scanner
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at Venta.escritura_venta(Venta.java:29)
at Menu.main(Menu.java:88)
I tried to declare object v outside main but inside the class Menú, but I displayed a similar error. I serialized the class Cliente but I displayed the error above. If I don't serialize it, the same error is displayed, but instead java.util.Scanner is class Cliente.
Why I displayed this error?
Thanks.