Practica con Threads y nullpointerexception
Publicado por Franjo (2 intervenciones) el 17/08/2006 15:44:13
Bueno, estoy haciendo una practica de un curso, con threads.
El codigo es el siguiente:
Almacen.java
------------------
package obligatorioTema13;
public class Almacen
{
public int MAX_NUM_ELTOS;
int[] eltos;
public int pos;
public Almacen()
{
// Constructor
// Inicializacion de valores y array.
MAX_NUM_ELTOS = 10;
int[] eltos = new int[MAX_NUM_ELTOS];
for (int i = 0; i < MAX_NUM_ELTOS; i++)
{
eltos[i] = 0;
}
pos = 0;
System.out.println("Almacen creado");
}
public synchronized void get()
{
if (pos > 0 && pos <= MAX_NUM_ELTOS)
{
System.out.println("La posición " + pos + " del array contiene el valor " + eltos[pos]);
}
}
public synchronized void put(int i)
{
if (pos > 0 && pos <= MAX_NUM_ELTOS)
{
eltos[pos] = i;
System.out.println("La posición " + pos + " insertada en el array contiene el valor " + eltos[pos]);
}
}
}
Consumidor.java
-----------------------
package obligatorioTema13;
public class Consumidor extends java.lang.Thread implements java.lang.Runnable
{
Almacen alm;
public Consumidor(Almacen a)
{
alm = a;
}
public void run()
{
for(int i = 0; i < alm.MAX_NUM_ELTOS; i++)
{
alm.pos = i;
//alm.get();
}
}
}
Productor.java
-------------------
package obligatorioTema13;
public class Productor extends java.lang.Thread implements java.lang.Runnable
{
Almacen alm;
public Productor(Almacen a)
{
alm = a;
}
public void run()
{
for(int i = 0; i < alm.MAX_NUM_ELTOS; i++)
{
alm.pos = i;
alm.put(i);
}
}
}
Y el programa principal, el que da los errores.
Programa.java
--------------------
import obligatorioTema13.*;
public class Programa {
public static void main(String[] args)
{
Almacen a = new Almacen();
Productor p = new Productor(a);
Consumidor c = new Consumidor(a);
Thread t1 = new Thread(c);
Thread t2 = new Thread(p);
t1.start();
t2.start();
System.out.println("Hilos lanzados");
}
}
El error que da es el siguiente:
Exception in thread "Thread-3" java.lang.NullPointerException
at obligatorioTema13.Almacen.put(Almacen.java:40)
at obligatorioTema13.Productor.run(Productor.java:17)
at java.lang.Thread.run(Unknown Source)
Por que me da error en la linea siguiente:
Dentro del Almacen.java, cuando el array está inicializado?
public synchronized void put(int i)
{
if (pos > 0 && pos <= MAX_NUM_ELTOS)
{
eltos[pos] = i; <<--------- EN ESTA LINEA!!!!!
System.out.println("La posición " + pos + " insertada en el array contiene el valor " + eltos[pos]);
}
}
Gracias por la ayuda.
El codigo es el siguiente:
Almacen.java
------------------
package obligatorioTema13;
public class Almacen
{
public int MAX_NUM_ELTOS;
int[] eltos;
public int pos;
public Almacen()
{
// Constructor
// Inicializacion de valores y array.
MAX_NUM_ELTOS = 10;
int[] eltos = new int[MAX_NUM_ELTOS];
for (int i = 0; i < MAX_NUM_ELTOS; i++)
{
eltos[i] = 0;
}
pos = 0;
System.out.println("Almacen creado");
}
public synchronized void get()
{
if (pos > 0 && pos <= MAX_NUM_ELTOS)
{
System.out.println("La posición " + pos + " del array contiene el valor " + eltos[pos]);
}
}
public synchronized void put(int i)
{
if (pos > 0 && pos <= MAX_NUM_ELTOS)
{
eltos[pos] = i;
System.out.println("La posición " + pos + " insertada en el array contiene el valor " + eltos[pos]);
}
}
}
Consumidor.java
-----------------------
package obligatorioTema13;
public class Consumidor extends java.lang.Thread implements java.lang.Runnable
{
Almacen alm;
public Consumidor(Almacen a)
{
alm = a;
}
public void run()
{
for(int i = 0; i < alm.MAX_NUM_ELTOS; i++)
{
alm.pos = i;
//alm.get();
}
}
}
Productor.java
-------------------
package obligatorioTema13;
public class Productor extends java.lang.Thread implements java.lang.Runnable
{
Almacen alm;
public Productor(Almacen a)
{
alm = a;
}
public void run()
{
for(int i = 0; i < alm.MAX_NUM_ELTOS; i++)
{
alm.pos = i;
alm.put(i);
}
}
}
Y el programa principal, el que da los errores.
Programa.java
--------------------
import obligatorioTema13.*;
public class Programa {
public static void main(String[] args)
{
Almacen a = new Almacen();
Productor p = new Productor(a);
Consumidor c = new Consumidor(a);
Thread t1 = new Thread(c);
Thread t2 = new Thread(p);
t1.start();
t2.start();
System.out.println("Hilos lanzados");
}
}
El error que da es el siguiente:
Exception in thread "Thread-3" java.lang.NullPointerException
at obligatorioTema13.Almacen.put(Almacen.java:40)
at obligatorioTema13.Productor.run(Productor.java:17)
at java.lang.Thread.run(Unknown Source)
Por que me da error en la linea siguiente:
Dentro del Almacen.java, cuando el array está inicializado?
public synchronized void put(int i)
{
if (pos > 0 && pos <= MAX_NUM_ELTOS)
{
eltos[pos] = i; <<--------- EN ESTA LINEA!!!!!
System.out.println("La posición " + pos + " insertada en el array contiene el valor " + eltos[pos]);
}
}
Gracias por la ayuda.
Valora esta pregunta


0