Buenas noches.
Estoy trabajando en un juego con MVC y rmi. Lo estoy haciendo con vista en consola y me sale el error cuando quiero agregar un jugador al array de jugadores desde la clase VistaConsola:
Exception in thread "main" java.lang.NullPointerException
at Vista.VistaConsola.menu(VistaConsola.java:37)
at Vista.VistaConsola.iniciar(VistaConsola.java:196)
at Controlador.ControladorJuego.<init>(ControladorJuego.java:53)
at AppCliente.main(AppCliente.java:66)
Les dejo mis clases:
public class Juego extends ObservableRemoto implements IJuego{
public ArrayList<Jugador> jugadores = new ArrayList<>();
public ArrayList<Jugador> jugador
public Juego() {
jugadorActual = 0;
ronda = 1;
}
estado=INICIANDO_JUEGO;
jugadorActual=0;
ronda=1;
notificarObservadores(1);
}
jugadores.add(new Jugador(nombre));
notificarObservadores(2);
}
}
public class VistaConsola implements ControlVista {
private static ControladorJuego miControl;
System.
out.
println("-------------------------"); System.
out.
println("- Configuración -"); System.
out.
println("-------------------------"); System.
out.
println("- M E N U -"); System.
out.
println("-------------------------"); System.
out.
println("- 1 - Agregar Jugador -"); System.
out.
println("- 2 - Mostrar Jugadores -"); System.
out.
println("- 3 - Iniciar Juego -"); System.
out.
println("-------------------------");
Scanner a
= new Scanner
(System.
in); int i = a.nextInt();
switch (i) {
case 1:
miControl.agregarJugador(nombreJugador());
break;
case 2:
miControl.mostrarJugadores();
break;
case 3:
miControl.jugando();
break;
}
}
System.
out.
println("Ingrese nombre de jugador "); Scanner sc
= new Scanner
(System.
in);
nom = sc.nextLine();
return nom;
}
ArrayList<Jugador> jugadores = miControl.getJugadores();
System.
out.
println(jugadores
);
}
menu();
}
public void setControlador
(ControladorJuego controlador
) throws RemoteException{ miControl = controlador;
}
}
public class ControladorJuego implements IControladorRemoto ;
private IJuego miJuego;
private ControlVista miVista;
this.miVista = miVista;
miVista.iniciar();
}
miJuego.agregarJugador(nombre);
}
return miJuego.mostrarJugadores();
}
int cambio = (int) queCambio;
switch (cambio) {
case 1:
break;
case 2:
System.
out.
println("Jugador agregado con exito");
break;
}
}
public interface ControlVista {
}
public class AppCliente {
public IJuego miJuego;
ArrayList
<String
> ips
= Util.
getIpDisponibles();; null,
"Seleccione la IP en la que escuchará peticiones el cliente", "IP del cliente",
null,
ips.toArray(),
null
);
null,
"Seleccione el puerto en el que escuchará peticiones el cliente", "Puerto del cliente",
null,
null,
9999
);
null,
"Seleccione la IP en la corre el servidor", "IP del servidor",
null,
null,
null
);
null,
"Seleccione el puerto en el que corre el servidor", "Puerto del servidor",
null,
null,
8888
);
ControlVista vista = new VistaConsola();
ControladorJuego controlador = new ControladorJuego(vista);
Cliente c
= new Cliente
(ip,
Integer.
parseInt(port
), ipServidor,
Integer.
parseInt(portServidor
)); vista.setControlador(controlador);
//vista.iniciar();
try {
c.iniciar(controlador);
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RMIMVCException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Si alguien me puede ayudar se lo agradeceria, no tengo idea de cual puede ser el error!
Actualiza el codigo con un nuevo log.
Para ver donde esta el null
Y Organiza mas esas clases, que faltan muchas xD, haces dificil que te ayuden asi socio.
Hola amig@. Te falta codigo para poder analizar el error. Pero por lo pronto veo que no intancias el atributo mijuego en la clase ControladorJuego. Y puede que te esté ahí el problema. Pero si puedes subir todas las clases e interfaces mejor.
Hola, aca les dejo todas las clases:
Clase AppCliente:
import java.util.ArrayList;
import java.rmi.RemoteException;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import Controlador.ControladorJuego;
import Vista.ControlVista;
import Vista.VistaConsola;
import Vista.VistaGrafica;
import ar.edu.unlu.rmimvc.RMIMVCException;
import ar.edu.unlu.rmimvc.cliente.Cliente;
import ar.edu.unlu.rmimvc.Util;
import Modelo.IJuego;
import Modelo.Juego;
//import cliente.Cliente;
public class AppCliente {
public IJuego miJuego;
ArrayList
<String
> ips
= Util.
getIpDisponibles();; null,
"Seleccione la IP en la que escuchará peticiones el cliente", "IP del cliente",
null,
ips.toArray(),
null
);
null,
"Seleccione el puerto en el que escuchará peticiones el cliente", "Puerto del cliente",
null,
null,
9999
);
null,
"Seleccione la IP en la corre el servidor", "IP del servidor",
null,
null,
null
);
null,
"Seleccione el puerto en el que corre el servidor", "Puerto del servidor",
null,
null,
8888
);
ControlVista vista = new VistaGrafica();
ControladorJuego controlador = new ControladorJuego(vista);
Cliente c
= new Cliente
(ip,
Integer.
parseInt(port
), ipServidor,
Integer.
parseInt(portServidor
)); vista.setControlador(controlador);
[color=red][b]vista.iniciar();[/b][/color]
try {
c.iniciar(controlador);
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RMIMVCException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Clase AppServidor:
import java.rmi.RemoteException;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import Modelo.IJuego;
import Modelo.Juego;
import ar.edu.unlu.rmimvc.RMIMVCException;
import ar.edu.unlu.rmimvc.Util;
import ar.edu.unlu.rmimvc.servidor.Servidor;
public class AppServidor {
ArrayList
<String
> ips
= Util.
getIpDisponibles(); null,
"Seleccione la IP en la que escuchará peticiones el servidor", "IP del servidor",
null,
ips.toArray(),
null
);
null,
"Seleccione el puerto en el que escuchará peticiones el servidor", "Puerto del servidor",
null,
null,
8888
);
Juego modelo = new Juego();
System.
out.
println("Juego creado"); Servidor servidor
= new Servidor
(ip,
Integer.
parseInt(port
)); try {
servidor.iniciar(modelo);
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RMIMVCException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Clase jugador:import java.io.Serializable;
import java.util.ArrayList;
import Cartas.Cartas;
import Cartas.Mazo;
import Cartas.Palos;
import ar.edu.unlu.rmimvc.observer.ObservableRemoto;
public int puntos=0;
public Jugador
(String nombre
){ this.nombre=nombre;
this.puntos=0;
}
Clase Juegopublic class Juego extends ObservableRemoto implements IJuego{
public ArrayList<Jugador> jugadores = new ArrayList<>();
public Juego() {
jugadorActual = 0;
ronda = 1;
}
estado=INICIANDO_JUEGO;
jugadorActual=0;
ronda=1;
notificarObservadores(1);
}
jugadores.add(new Jugador(nombre));
notificarObservadores(2);
}
}
Interface IJuego:import java.io.EOFException;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.StreamCorruptedException;
import java.rmi.RemoteException;
import java.util.ArrayList;
import Cartas.Cartas;
import Cartas.Mazo;
import ar.edu.unlu.rmimvc.observer.IObservableRemoto;
public interface IJuego extends IObservableRemoto {
}
Controlador:public class ControladorJuego implements IControladorRemoto ;
private IJuego miJuego;
private ControlVista miVista;
this.miVista = miVista;
miVista.iniciar();
}
[color=red][b]miJuego.agregarJugador(nombre);[/b][/color]
}
return miJuego.mostrarJugadores();
}
int cambio = (int) queCambio;
switch (cambio) {
case 1:
break;
case 2:
System.
out.
println("Jugador agregado con exito");
break;
}
@Override
public <T
extends IObservableRemoto
> void setModeloRemoto
(T arg0
) throws RemoteException { // TODO Auto-generated method stub
}
}
Clase vistaConsola:import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Scanner;
import Vista.ControlVista;
import Controlador.ControladorJuego;
import Modelo.Juego;
import Modelo.Jugador;
public class VistaConsola implements ControlVista {
private static ControladorJuego miControl;
System.
out.
println("-------------------------"); System.
out.
println("- Configuración -"); System.
out.
println("-------------------------"); System.
out.
println("- M E N U -"); System.
out.
println("-------------------------"); System.
out.
println("- 1 - Agregar Jugador -"); System.
out.
println("- 2 - Mostrar Jugadores -"); System.
out.
println("- 3 - Iniciar Juego -"); System.
out.
println("-------------------------");
Scanner a
= new Scanner
(System.
in); int i = a.nextInt();
switch (i) {
case 1:
System.
out.
println("Ingrese nombre de jugador "); Scanner sc
= new Scanner
(System.
in);
nom = sc.nextLine();
[color=red][b]miControl.agregarJugador(nom);[/b][/color]
break;
}
[color=red][b]menu();[/b][/color]
}
@Override
public void setControlador
(ControladorJuego controlador
) throws RemoteException{ miControl = controlador;
}
}
Interface controlVistaimport java.io.IOException;
import java.rmi.RemoteException;
import Controlador.ControladorJuego;
public interface ControlVista {
}
El error es:
Exception in thread "main" java.lang.NullPointerException
at Controlador.ControladorJuego.agregarJugador(ControladorJuego.java:)
at Vista.VistaConsola.menu(VistaConsola.java:)
at Vista.VistaConsola.iniciar(VistaConsola.java:)
at AppCliente.main(AppCliente.java:)
Marque en rojo las lineas en las que me salta error
hola gracias por tu respuesta. Si inicializo juego en el controlador se me crean dos juegos diferentes para cada cliente