Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Ruusa

#1
Java / Ayuda para leer archivo de objetos!
13 Noviembre 2021, 17:30 PM
Hola a todos! Tengo problemas para leer un archivo de objetos, si alguien me puede ayudar se lo agradeceria!

Asi guardo los objetos:
Código (java) [Seleccionar]
public void guardar (Jugador j) throws IOException {
ganadores.add(j);
File f= new File("jugador7.dat");
if( f.exists()){
MiObjectOutputStream salida= new MiObjectOutputStream(new FileOutputStream(f));
salida.writeObject(ganadores);
salida.close();
} else {
ObjectOutputStream salida= new ObjectOutputStream(new FileOutputStream("jugador9.dat"));
salida.writeObject(ganadores);
salida.close();

}



y asi los leo:

public String recuperar() throws FileNotFoundException, IOException, EOFException, ClassNotFoundException, StreamCorruptedException {
String ganadoress="";
//ObjectInputStream entrada=null;
System.out.println("antes");
int i=0;

try {
ObjectInputStream entrada = new ObjectInputStream(new FileInputStream("jugador9.dat"));

System.out.println("Entro");
     ganadores = (ArrayList<Jugador>) entrada.readObject();
     entrada.close();
   try {
    while (true) {
    System.out.println(ganadores.get(i).getNombre());
    i++;
    ganadores = (ArrayList<Jugador>) entrada.readObject();
   
    }
   

return ganadoress;

}


Clase miObjectOutputStream:

public class MiObjectOutputStream extends ObjectOutputStream{

@Override
protected void writeStreamHeader() throws IOException  {
//nada
}

public MiObjectOutputStream() throws IOException {
super();
}

public MiObjectOutputStream (OutputStream fileOutputStream) throws IOException  {
// TODO Auto-generated constructor stub
super(fileOutputStream);
}
#2
Java / Ayuda con ObjectOutputStream!
30 Agosto 2021, 18:21 PM
Hola. Buenas tardes, estoy haciendo un ejercicio con persistencia. Y tengo problemas para grabar los objetos en un archivo. Voy agregando los objetos de a uno, ya que tengo un menu. Cuando agrego el primer objeto se lee bien, pero cuando agrego el segundo ya no se lee ninguno. Nose que estoy haciendo mal

Código (java) [Seleccionar]
public class MiObjectOutputStream extends ObjectOutputStream{ //clase q hereda de objectoutputstream para no sobreescribir la cabecera

public void writeStreamHeader() {
//nada
}

public MiObjectOutputStream() throws IOException {
super();
}

public MiObjectOutputStream (FileOutputStream fileOutputStream) throws IOException {
// TODO Auto-generated constructor stub
super(fileOutputStream);
}

}


//Los metodos guardar y recuperar estan en otra clase

public void guardar (Jugador j) throws IOException {
File f= new File("jugador.objeto");
if( f.exists()){
MiObjectOutputStream salida= new MiObjectOutputStream(new FileOutputStream(f));
salida.writeObject(j);
salida.close();
} else {
ObjectOutputStream salida= new ObjectOutputStream(new FileOutputStream(f,true));
salida.writeObject(j);
salida.close();
}


}

public void recuperar() throws FileNotFoundException, IOException, EOFException, ClassNotFoundException {
ObjectInputStream entrada=null;
try{ entrada = new ObjectInputStream(new FileInputStream("jugador.objeto"));

while (true) {
Jugador j = ( Jugador) entrada.readObject();
System.out.println(j.getNombre());



}
} catch(IOException io){
} finally {
try {
entrada.close();
} catch (Exception exp) {
}


}


MOD: Etiqueta GeSHi
#3
Java / Ayuda con persistencia!
18 Agosto 2021, 15:04 PM
Hola, buen dia!
Tengo un problema al implementar persistencia. Lo que quiero hacer es guardar en un archivo los ganadores de un juego y ni se llega a crear el archivo. No entiendo que es lo que estoy haciendo mal.

En la clase Juego tengo este metodo:

private Persistencia p;

public Jugador mostrarGanador()throws RemoteException { //devuelve el ganador
      int mayor=0;
      Jugador j = null;
      for (int i=0; i<jugadores.size();i++) {
         if (jugadores.get(i).getPuntos() > mayor) {
            mayor=jugadores.get(i).getPuntos();
               j=jugadores.get(i);
         }
   
      
   }
      
      try {
         p.guardar(j);  //Este es el metodo guardar de la clase Persistencia, aqui
      } catch (IOException e) {     quiero guardar el ganador
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
      return j;
   }


Clase persistencia:

public class Persistencia {
   
   public void guardar (Jugador j) throws IOException {
      ObjectOutputStream salida= new ObjectOutputStream(new FileOutputStream("jugador.objeto"));
      salida.writeObject(j);
      salida.close();
   
   }
   
   
   public Jugador recuperar() throws FileNotFoundException, IOException, ClassNotFoundException {
      ObjectInputStream entrada = new ObjectInputStream(new FileInputStream("jugador.objeto"));
      Jugador j = (Jugador ) entrada.readObject();
        entrada.close();
        return j;

   }

   
}
#4
Java / Re: remove no funciona
19 Marzo 2021, 23:16 PM
Cita de: K-YreX en 18 Marzo 2021, 07:10 AM
Supongo que <cartasEnMano> es un ArrayList<> de algún tipo de objeto que has creado tú, no?

Cuando se utiliza ArrayList.remove(Object o), se elimina el objeto i del array que cumpla Objects.equals(o, array.get(i)). En resumen, necesitas sobreescribir el método equals() para determinar cuándo dos objetos son iguales ya que si no lo haces sólo serán iguales cuando sean el mismo objeto (misma dirección de memoria).

Otra solución más sencilla si ya tienes el índice es usar ArrayList.remove(int index).
Código (java) [Seleccionar]
j.cartasEnMano.remove(op)
Además de más sencillo, es más seguro pues te aseguras de tirar exactamente la misma y no otra que sea igual a esa.


PD: Utiliza las etiquetas de Código GeSHi para el código ya sea abriendo el desplegable que se llama "Código GeSHi" y eligiendo Java o escribiendo directamente:
[code=java]
Tu código Java aquí
[/code]



Hola muchas gracias. Intente eso y sigue sin funcionar. Nose que esta pasando. no me anda ningun metodo del arraylist cuando lo llamo dentro de ese metodo. Es muy raro
#5
Java / remove no funciona
17 Marzo 2021, 00:33 AM
Hola buenas noches. Tengo un problema para eliminar elementos de un arraylist.
Cuando llamo al metodo remove no funciona. No borra el elemento deseado.

Código (java) [Seleccionar]
boton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
if (indice < miControl.jugador(nombreJ).cartasEnMano.size()) {
r=indice;
ImageIcon imagen = new
ImageIcon(miControl.jugador(nombreJ).cartasEnMano.get(indice)+".jpg");
cartaNum.setText("Carta numero: "+ indice);
btn.setIcon(new
ImageIcon(imagen.getImage().getScaledInstance(btn.getWidth(),btn.getHeight(),Image.SCALE_SMOOTH)));
indice++;

}else {
indice=0;
r=0;

}

}


catch (RemoteException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

}
});

boton3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {

miControl.tirarCarta(r,miControl.jugador(nombreJ));
indice=0;
r=0;
}

else {

}
}



public void tirarCarta( int op, Jugador j) throws RemoteException {
//op va a ser la carta a tirar y jugador va a ser el jugador que la tira
mesa.add(j.cartasEnMano.get(op));
j.cartasEnMano.remove(j.cartasEnMano.get(op));


}



Si alguien me puede ayudar se lo agradeceria

MOD: Etiqueta GeSHi
#6
Java / Problema con boton
14 Marzo 2021, 16:01 PM
Hola. Buenas tardes para todos.
Estoy haciendo un juego implementando RMI y MVC y me surgio un problema con el boton "agregar jugador".
Cuando abro solo un cliente anda bien, agrega a los jugadores de forma correcta. Pero al abrir dos falla, agrega solo a 1 jugador y le reparte seis cartas. Nose cual sera el problema ya que nunca trabaje con RMI, soy novata con eso.
Si alguien me puede ayudar para darme cuenta de que esta pasando se lo agradeceria.

Les dejo las clases:

import java.io.Serializable;
import java.util.ArrayList;

import Cartas.Cartas;
import Cartas.Mazo;
import Cartas.Palos;

public class Jugador implements Serializable {

public String nombre;
public int escoba=0;
public int sietes=0;
public int oros=0;
public int sieteOro=0;
public int cartas=0;
public int puntos=0;
protected boolean estado;
public ArrayList<Cartas> mazo_jugador = new ArrayList<>(); // Mazo donde juntara las cartas que levanta
public ArrayList<Cartas> cartasEnMano = new ArrayList<>(); //Cartas que va a tener en la mano


public Jugador (String nombre){
this.nombre=nombre;
this.puntos=0;
this.escoba=0;
//this.estado=true;

}

public int getPuntos() {
return this.puntos;
}

public void setPuntos() {
this.puntos++;
}
public void sieteOro() {
for (int i=0;i<mazo_jugador.size();i++) {
//mazo_jugador.get(i).getPalo();
if (mazo_jugador.get(i).numero==7 && mazo_jugador.get(i).getPalo().equals(Palos.ORO)) {
this.puntos++;


}
}
}


public void sietes() {
for (int i=0;i<mazo_jugador.size();i++) {
if(mazo_jugador.get(i).numero==7) {
this.sietes++;
}
}
if (this.sietes>=2) {
this.puntos++;
}
}


public void agregarCarta(Cartas carta){
if (carta!=null) {
cartasEnMano.add(carta); //Cuando reparten agrega carta a cartasEnMano (3 cartas)
}
}


public String getNombre() {
return nombre;
}

public void escoba() {
this.puntos++;// TODO Auto-generated method stub

}


}



import java.rmi.RemoteException;
import java.util.ArrayList;
import java.rmi.Remote;


import Cartas.Cartas;
import Cartas.Mazo;
import Cartas.Palos;
import Modelo.Jugador;
import ar.edu.unlu.rmimvc.observer.ObservableRemoto;

public class Juego extends ObservableRemoto implements IJuego{




public ArrayList<Jugador> jugadores = new ArrayList<>(); //Lista de jugadores
public static ArrayList<Cartas> mesa = new ArrayList<>(); //Cartas en mesa
public Mazo mazoCarta = new Mazo(); //Mazo
private static int jugadorActual=0;
//private int jugadorMano=0;
public static int ronda=0;
private int estado;
public static final int INICIANDO_JUEGO = 0;
public static final int JUGANDO = 1; //Controladores de estado
public static final int FINALIZADO = 2;
public static int contador=0;
public static int contador2=0;
public static int reparte=0;






public Juego() {
estado=INICIANDO_JUEGO;
jugadorActual = 0;
ronda = 0;
//notificarObservadores(1);
}

@Override
public void iniciar() throws RemoteException {
estado=INICIANDO_JUEGO;
jugadorActual=0;
ronda=0;
notificarObservadores(1);
}


@Override
public void jugando() throws RemoteException { //Para cuando este jugando
int cont=1;
estado=JUGANDO;
repartirMesa();
repartirJugadores();
jugadorActual=0;
ronda=0;
notificarObservadores(4);
}


@Override
public void agregarJugador (String nombre) throws RemoteException {

jugadores.add(new Jugador(nombre));
notificarObservadores(2);
}

@Override
public ArrayList<Jugador> getJugadores() throws RemoteException{
return jugadores;
}

public ArrayList<Cartas> getMesa() throws RemoteException{
return mesa;
}

}


import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Observable;
import java.util.Observer;
import java.util.Scanner;


import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

import Cartas.Cartas;
import Modelo.IJuego;
import Modelo.Juego;
import Modelo.Jugador;
import Vista.ControlVista;
import Vista.VistaConsola;
import Vista.VistaGrafica;
import ar.edu.unlu.rmimvc.cliente.IControladorRemoto;
import ar.edu.unlu.rmimvc.observer.IObservableRemoto;




public class ControladorJuego implements IControladorRemoto {

public static final int INICIANDO_JUEGO = Juego.INICIANDO_JUEGO;
public static final int JUGANDO = Juego.JUGANDO; // Controladores de estado
public static final int FINALIZADO = Juego.FINALIZADO;
public static int eleccionVista;



private IJuego miJuego;
private ControlVista miVista;

public ControladorJuego(ControlVista miVista/*, Juego juego*/) {
//this.miJuego = juego;
this.miVista = miVista;
//juego.addObserver(this);

}

public void agregarJugador(String nombre) throws RemoteException {
miJuego.agregarJugador(nombre);
}

public static void iniciarJuego() throws RemoteException{
//miJuego.addObserver(this);
//miJuego.iniciar();
}




public static void main(String args[]) throws RemoteException {
//vistaPrincipal();
/*System.out.println("Elige vista");
System.out.println("");
System.out.println("1. Vista consola");
System.out.println("2. Vista grafica");

Scanner sc = new Scanner(System.in);
int eleccionVista = sc.nextInt();

if (eleccionVista==1) {
Juego jue = new Juego();
ControlVista vista = new VistaConsola();
ControladorJuego c = new ControladorJuego(vista);
jue.iniciar();}

else {
if(eleccionVista==2) {
Juego jue= new Juego();
ControlVista vista = new VistaGrafica();
ControladorJuego c = new ControladorJuego(vista);
jue.iniciar();



}
}*/
}



public String getJugadores() throws RemoteException {
return miJuego.mostrarJugadores();

}

public ArrayList<Cartas> getMesa() throws RemoteException {
return miJuego.getMesa();
}

public void mostrarJugadores() throws RemoteException {
miVista.mostrarJugadores();
//mivista.menu();
}

public void mostrarJugador() throws RemoteException {
miVista.mostrarJugador();
miVista.menuJugador();
}

public String getCartasMesa() throws RemoteException {
return miJuego.mostrarMesa();
}

public String getCartasEnMano(Jugador j) throws RemoteException{
return miJuego.mostrarCartasEnMano(j);
}

public void mostrarCartasEnMano() throws RemoteException {
System.out.println("Cartas en mano");
miVista.mostrarCartasEnMano();
}

public void mostrarMesa() throws RemoteException {
System.out.println("Cartas en mesa");
miVista.mostrarMesa();
}

public void tirarCarta(int op, Jugador j) throws RemoteException{
miJuego.tirarCarta(op, j);

}

public void seleccionarCartasMesa(int op, Jugador j) throws RemoteException {
miJuego.seleccionarCartasMesa(op, j);
}

public void seleccionarCartasMazo(int op, Jugador j) throws RemoteException{
miJuego.seleccionarCartasMazo(op, j);
}

public String mostrarCartasEnMano(Jugador j) throws RemoteException{
return miJuego.mostrarCartasEnMano(j);
}

public Jugador getJugador()throws RemoteException {
return miJuego.getJugador();
}

public void turnosJugador() throws RemoteException {
miJuego.turnosJugador();
}

public int mostrarContador() throws RemoteException{
return miJuego.mostrarContador();
}

public void devolverCartasMesa(Jugador j) throws RemoteException {
miJuego.devolverCartasMesa(j);
}

public void devolverCartasMazo(Jugador j)throws RemoteException {
miJuego.devolverCartasMazo(j);
}

public boolean controlCartaJugadores() throws RemoteException {
return miJuego.controlCartaJugadores();
}

public void verificarCartas() throws RemoteException{
miJuego.verificarCartas();
}



public void getMesa(Jugador j) throws RemoteException {
miJuego.agarrarMesa(j);

}

@Override
public void actualizar(IObservableRemoto modelo, Object queCambio) throws RemoteException{
int cambio = (int) queCambio;
switch (cambio) {
case 1:
//mivista.menu();
break;
case 2:
System.out.println("Jugador agregado con exito");
break;
case 3:
break;
case 4:
break;
}}


import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.rmi.RemoteException;
import java.util.Scanner;

import javax.swing.*;
import javax.swing.border.EmptyBorder;

import Controlador.ControladorJuego;
import Modelo.Juego;
import Modelo.Jugador;
//import Modelo.Jugador;




public class VistaGrafica extends JFrame implements ControlVista{

private JPanel contentPane;
private JTextField txtAgregarJugador;
private JButton boton1;
private JButton boton2;
private static JPanel panel;
private static JPanel panel2;
private static JTextArea textArea;
private static ControladorJuego miControl;
private static Juego miJuego;
private static int indice=0;
private static int indice2=0;
private static int r=0;
private static int r2=0;
private static JFrame frame;
private JLabel turno;
public Image fondo;





public void menu() throws RemoteException{
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(400, 50, 700, 500);
frame.setTitle("Escoba de 15");
frame.setLayout(null);
JPanel contentPane = new JPanel();
contentPane.setBounds(0,0,700,500);
contentPane.setBackground(Color.black);
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setVisible(true);

frame.getContentPane().add(contentPane);



panel = new JPanel();
panel.setBounds(0,0,700, 500);
panel.setBackground(Color.LIGHT_GRAY);
panel.setBorder(new EmptyBorder(5, 5, 5, 5));




JLabel imagenMenu = new JLabel("MENU");
imagenMenu.setFont(new Font("Curlz MT",Font.PLAIN,70));
imagenMenu.setBounds(250,20,200,200);
imagenMenu.setForeground(Color.pink);
contentPane.add(imagenMenu);

JLabel imagenCartas = new JLabel();
imagenCartas.setBounds(0,300,200,200);
ImageIcon imagen3 = new ImageIcon("cartas2.jpg");
imagenCartas.setIcon(new ImageIcon(imagen3.getImage().getScaledInstance(imagenCartas.getWidth(),imagenCartas.getHeight(),Image.SCALE_SMOOTH)));
//contentPane.add(imagenCartas);






panel2 = new JPanel();
panel2.setBounds(0,0,700,500);
panel2.setBackground(Color.pink);
panel2.setBorder(new EmptyBorder(5, 5, 5, 5));



JTextField txtAgregarJugador = new JTextField();
//txtAgregarJugador.setBounds(new Rectangle(0, 0, 25, 23));
//txtAgregarJugador.setEditable(true);
txtAgregarJugador.setBounds(250, 200, 179, 33);
txtAgregarJugador.setHorizontalAlignment(SwingConstants.CENTER);
txtAgregarJugador.setBackground(new Color(192, 192, 192));
//txtAgregarJugador.setEnabled(false);
txtAgregarJugador.setFont(new Font("Arial", Font.ITALIC, 13));
txtAgregarJugador.setText("Nombre jugador");
txtAgregarJugador.setToolTipText("Agregar jugador");
txtAgregarJugador.setColumns(10);
contentPane.add(txtAgregarJugador);


JButton boton1 = new JButton("Agregar jugador");
//boton1.setForeground(new Color(255, 0, 255));
boton1.setBackground(new Color(218, 112, 214));
boton1.setBounds(new Rectangle(250, 250, 179, 31));
//boton1.setFont(new Font("Trebuchet MS", Font.PLAIN, 11));
contentPane.setLayout(null);
contentPane.add(boton1);
boton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
try {
miControl.agregarJugador(txtAgregarJugador.getText());
txtAgregarJugador.setText(null);
} catch (RemoteException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}


}


// textArea.setText(txtAgregarJugador.getText()+"");



});

textArea = new JTextArea(12,30);
//textArea.setForeground(new Color(255, 105, 180));
//textArea.setToolTipText("mostrarJugadores");
//textArea.setBounds(0,0, 100, 100);
textArea.setEditable(false);
//contentPane.add(textArea);

JButton boton2 = new JButton("Iniciar juego");
boton2.setBackground(new Color(218, 112, 214));
//boton2.setForeground(new Color(255, 0, 255));
boton2.setBounds(550, 400, 108, 33);
contentPane.add(boton2);
boton2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
contentPane.setVisible(false);
frame.setBounds(400, 50, 700, 600);
frame.setContentPane(panel);
frame.setTitle("Jugando");
frame.setVisible(true);
panel.setVisible(true);
panel.setLayout(null);

try {
miControl.jugando() ;
menuJugador();
mostrarMesa();
} catch (RemoteException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}


});

frame.setVisible(true);



}






public void menuJugador() throws RemoteException {
JLabel cartaNum = new JLabel();
cartaNum.setBounds(420,250,120,120);


ImageIcon imagen = new ImageIcon("tapa.jpg");
JLabel btn = new JLabel();
btn.setBounds(270,350,120,180);

turno = new JLabel("Turno de: "+miControl.getJugador().getNombre());

turno.setBounds(0,0,200,20);
panel.add(turno);

JButton boton = new JButton("Siguiente");
boton.setBounds(420,360,100,30);
boton.setBackground(new Color(218, 112, 214));


JButton boton3 = new JButton("Tirar");
boton3.setBounds(420,410,100,30);
boton3.setBackground(new Color(218, 112, 214));

JButton boton4 = new JButton("Agrupar");
boton4.setBounds(420,460,100,30);
boton4.setBackground(new Color(218, 112, 214));

JButton boton5 = new JButton("Formar 15");
boton5.setBounds(540,410,100,30);
boton5.setBackground(Color.magenta);








btn.setIcon(new ImageIcon(imagen.getImage().getScaledInstance(btn.getWidth(),btn.getHeight(),Image.SCALE_SMOOTH)));

panel.add(btn);
panel.add(boton);
panel.add(boton3);
panel.add(boton4);
panel.add(boton5);
panel.add(cartaNum);

turno.setText("Turno de: "+miControl.getJugador().getNombre());
boton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
if (indice < miControl.getJugador().cartasEnMano.size()) {
r=indice;
ImageIcon imagen = new ImageIcon(miControl.getJugador().cartasEnMano.get(indice)+".jpg");
cartaNum.setText("Carta numero: "+ indice);
btn.setIcon(new ImageIcon(imagen.getImage().getScaledInstance(btn.getWidth(),btn.getHeight(),Image.SCALE_SMOOTH)));
indice++;

} else {
indice=0;
r=0;

}
}

catch (RemoteException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

}
} );

boton3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
miControl.tirarCarta(r,miControl.getJugador());
} catch (RemoteException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
indice=0;
r=0;
cartaNum.setText("");
try {
turno.setText("Turno de: "+miControl.getJugador().getNombre());
} catch (RemoteException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
ImageIcon imagen = new ImageIcon("tapa.jpg");
btn.setIcon(new ImageIcon(imagen.getImage().getScaledInstance(btn.getWidth(),btn.getHeight(),Image.SCALE_SMOOTH)));


}




});

boton4.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
miControl.seleccionarCartasMazo(r, miControl.getJugador());
} catch (RemoteException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
indice=0;
r=0;
cartaNum.setText("");
/*ImageIcon imagen = new ImageIcon("tapa.jpg");
btn.setIcon(new ImageIcon(imagen.getImage().getScaledInstance(btn.getWidth(),btn.getHeight(),Image.SCALE_SMOOTH)));
miControl.verificarCartas();
turno.setText("Turno de: "+miControl.getJugador().getNombre());*/
}
});
boton5.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ImageIcon imagen = new ImageIcon("tapa.jpg");
btn.setIcon(new ImageIcon(imagen.getImage().getScaledInstance(btn.getWidth(),btn.getHeight(),Image.SCALE_SMOOTH)));
try {
miControl.verificarCartas();
} catch (RemoteException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
turno.setText("Turno de: "+miControl.getJugador().getNombre());
} catch (RemoteException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

}});


};
public void mostrarJugadores(){
System.out.println("todavia nada");
};


public void mostrarMesa() throws RemoteException {

JLabel cartaNum = new JLabel();
cartaNum.setBounds(0,100,120,120);

ImageIcon imagen2 = new ImageIcon(miControl.getMesa().get(indice2)+".jpg");
JLabel btn2 = new JLabel();
btn2.setBounds(270,20,120,180);

JButton boton5 = new JButton("Siguiente");
boton5.setBounds(420,70,100,30);
boton5.setBackground(new Color(218, 112, 214));


JButton boton6 = new JButton("Agrupar");
boton6.setBounds(420,120,100,30);
boton6.setBackground(new Color(218, 112, 214));

btn2.setIcon(new ImageIcon(imagen2.getImage().getScaledInstance(btn2.getWidth(),btn2.getHeight(),Image.SCALE_SMOOTH)));

panel.add(btn2);
panel.add(boton5);
panel.add(boton6);
boton5.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
if (indice2 < miControl.getMesa().size()) {
r2=indice2;
ImageIcon imagen2 = new ImageIcon(miControl.getMesa().get(indice2)+".jpg");
cartaNum.setText("Carta numero: "+ indice2);
btn2.setIcon(new ImageIcon(imagen2.getImage().getScaledInstance(btn2.getWidth(),btn2.getHeight(),Image.SCALE_SMOOTH)));
indice2++;
} else {
indice2=0;
r2=0;
}
} catch (RemoteException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}



}
});

boton6.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
/*ImageIcon imagen2 = new ImageIcon("tapa.jpg");
btn2.setIcon(new ImageIcon(imagen2.getImage().getScaledInstance(btn2.getWidth(),btn2.getHeight(),Image.SCALE_SMOOTH)));*/
try {
miControl.seleccionarCartasMesa(r2, miControl.getJugador());
} catch (RemoteException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
indice2=0;
r2=0;
}
});
}



import java.rmi.RemoteException;

import Controlador.ControladorJuego;

public interface ControlVista {
void menu() throws RemoteException;
void setControlador(ControladorJuego controlador);
void menuJugador() throws RemoteException;
void mostrarJugadores() throws RemoteException ;
void mostrarMesa() throws RemoteException ;
void mostrarCartasEnMano() ;
void mostrarJugador() ;
void menuCartasAgrupadas();
void menuNoforman15();
void jugadorAgregado();
void menuSumarPuntos();
void iniciar() throws RemoteException ;



}


public interface IJuego extends IObservableRemoto {

void iniciar() throws RemoteException;

void jugando() throws RemoteException;

void agregarJugador(String nombre) throws RemoteException;

ArrayList<Jugador> getJugadores() throws RemoteException;

int getEstado() throws RemoteException;

void finaliza() throws RemoteException;

void repartirJugadores() throws RemoteException;

void repartirMesa() throws RemoteException ;

String mostrarMesa() throws RemoteException;

String mostrarCartasEnMano(Jugador j) throws RemoteException ;

void tirarCarta(int op, Jugador j) throws RemoteException;




boolean controlCartaJugadores() throws RemoteException;

String mostrarJugadores() throws RemoteException;

void turnosJugador() throws RemoteException;

Jugador getJugador() throws RemoteException;

int jugadorActual() throws RemoteException;

void seleccionarCartasMesa(int op, Jugador j) throws RemoteException;

void seleccionarCartasMazo(int op, Jugador j) throws RemoteException;

int mostrarContador() throws RemoteException ;

void verificarCartas() throws RemoteException;

void devolverCartasMesa(Jugador j) throws RemoteException;

void devolverCartasMazo(Jugador j) throws RemoteException;

int getCartaActual() throws RemoteException;

void agarrarMesa(Jugador j) throws RemoteException;

void getOros() throws RemoteException;

void getContarCartas()throws RemoteException ;

void contarPuntos() throws RemoteException;

String mostrarGanador() throws RemoteException;

boolean consultarMazo() throws RemoteException;

void actualizarARepartirCartas() throws RemoteException;

ArrayList<Cartas> getMesa() throws RemoteException;

}

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 {

public static void main(String[] args) throws RemoteException {
ArrayList<String> ips = Util.getIpDisponibles();
String ip = (String) JOptionPane.showInputDialog(
null,
"Seleccione la IP en la que escuchará peticiones el servidor", "IP del servidor",
JOptionPane.QUESTION_MESSAGE,
null,
ips.toArray(),
null
);
String port = (String) JOptionPane.showInputDialog(
null,
"Seleccione el puerto en el que escuchará peticiones el servidor", "Puerto del servidor",
JOptionPane.QUESTION_MESSAGE,
null,
null,
8888
);

Juego modelo = new Juego();
System.out.println("Juego creado");
Servidor servidor = new Servidor(ip, Integer.parseInt(port));
try {
servidor.iniciar(modelo);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RMIMVCException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}


import java.util.ArrayList;



import java.rmi.RemoteException;
import java.util.ArrayList;

import javax.swing.JOptionPane;
import Controlador.ControladorJuego;
import Vista.ControlVista;
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;

public static void main(String[] args) throws RemoteException {
ArrayList<String> ips = Util.getIpDisponibles();;
String ip = (String) JOptionPane.showInputDialog(
null,
"Seleccione la IP en la que escuchará peticiones el cliente", "IP del cliente",
JOptionPane.QUESTION_MESSAGE,
null,
ips.toArray(),
null
);
String port = (String) JOptionPane.showInputDialog(
null,
"Seleccione el puerto en el que escuchará peticiones el cliente", "Puerto del cliente",
JOptionPane.QUESTION_MESSAGE,
null,
null,
9999
);
String ipServidor = (String) JOptionPane.showInputDialog(
null,
"Seleccione la IP en la corre el servidor", "IP del servidor",
JOptionPane.QUESTION_MESSAGE,
null,
null,
null
);
String portServidor = (String) JOptionPane.showInputDialog(
null,
"Seleccione el puerto en el que corre el servidor", "Puerto del servidor",
JOptionPane.QUESTION_MESSAGE,
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);
vista.iniciar();
try {
c.iniciar(controlador);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RMIMVCException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}




Claramente las interfaces tienen metodos que no escribi porque sino se haria muy larga la publicacion y el problema puntual esta en agregarjugador
#7
Java / Ayuda con rmi y mvc!
9 Marzo 2021, 17:34 PM
Hola! buen dia! Estoy haciendo un juego y tengo problemas al implementar RMI. Cuando quiero agregar un jugador a traves del boton 1,(clase vistaGrafica) me muestra el Showmessagedialog sin texto y se congela todo. Nose que estoy haciendo mal, Si alguien me puede ayudar se lo agradeceria. Este es el codigo:

Código (java) [Seleccionar]
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.rmi.Remote;
import Cartas.Cartas;
import Cartas.Mazo;
import Cartas.Palos;
import Modelo.Jugador;
import ar.edu.unlu.rmimvc.observer.ObservableRemoto;

public class Juego extends ObservableRemoto implements IJuego{




public ArrayList<Jugador> jugadores = new ArrayList<>();


public Juego() {
}


@Override
public void agregarJugador (String nombre) throws RemoteException {
jugadores.add(new Jugador(nombre));
notificarObservadores(2);
}





Código (java) [Seleccionar]
package Controlador;

import java.rmi.RemoteException;

import Modelo.IJuego;
import Modelo.Juego;
import Modelo.Jugador;
import Vista.ControlVista;
import Vista.VistaGrafica;
import ar.edu.unlu.rmimvc.cliente.IControladorRemoto;
import ar.edu.unlu.rmimvc.observer.IObservableRemoto;




public class ControladorJuego implements IControladorRemoto {



private static IJuego miJuego;
private ControlVista miVista;

public ControladorJuego(ControlVista miVista) {
this.miVista = miVista;

}

public void agregarJugador(String nombre) throws RemoteException {
miJuego.agregarJugador(nombre);
}

public void actualizar(IObservableRemoto modelo, Object queCambio) throws RemoteException{
int cambio = (int) queCambio;
switch (cambio) {
case 1:
miVista.menu();
break;
case 2:
this.miVista.jugadorAgregado();
break;
}
}

@Override
public <T extends IObservableRemoto> void setModeloRemoto(T modeloRemoto) throws RemoteException {
this.miJuego = (IJuego) modeloRemoto;


}
}





Código (java) [Seleccionar]
package Vista;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.rmi.RemoteException;

import javax.swing.*;
import javax.swing.border.EmptyBorder;

import Controlador.ControladorJuego;
import Modelo.Juego;
import Modelo.Jugador;




public class VistaGrafica extends JFrame implements ControlVista{

private JPanel contentPane;
private JTextField txtAgregarJugador;
private JButton boton1;
private JButton boton2;
private static JPanel panel;
private static ControladorJuego miControl;
private static Juego miJuego;
private static int indice=0;
private static int indice2=0;
private static int r=0;
private static int r2=0;
private static JFrame frame;






public void menu() throws RemoteException{
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(400, 50, 700, 500);
frame.setTitle("Escoba de 15");
frame.setLayout(null);
JPanel contentPane = new JPanel();
contentPane.setBounds(0,0,700,500);
contentPane.setBackground(Color.black);
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setVisible(true);

frame.getContentPane().add(contentPane);



panel = new JPanel();
panel.setBounds(0,0,700, 500);
panel.setBackground(Color.LIGHT_GRAY);
panel.setBorder(new EmptyBorder(5, 5, 5, 5));


panel2 = new JPanel();
panel2.setBounds(0,0,700,500);
panel2.setBackground(Color.pink);
panel2.setBorder(new EmptyBorder(5, 5, 5, 5));



JTextField txtAgregarJugador = new JTextField();
txtAgregarJugador.setBounds(250, 200, 179, 33);
txtAgregarJugador.setHorizontalAlignment(SwingConstants.CENTER);
txtAgregarJugador.setBackground(new Color(192, 192, 192));
txtAgregarJugador.setText("Nombre jugador");
txtAgregarJugador.setColumns(10);


JButton boton1 = new JButton("Agregar jugador");
boton1.setBackground(new Color(218, 112, 214));
boton1.setBounds(new Rectangle(250, 250, 179, 31));
contentPane.setLayout(null);
contentPane.add(txtAgregarJugador);
contentPane.add(boton1);
boton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
miControl.agregarJugador(txtAgregarJugador.getText());
} catch (RemoteException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

}



});


frame.setVisible(true);



}

public void jugadorAgregado() throws RemoteException {
JOptionPane.showMessageDialog(null, "Jugador agregado con exito");
};

@Override
public void setControlador(ControladorJuego controlador) {
this.miControl = controlador;

};

public void iniciar() throws RemoteException {
menu();
}
}





Código (java) [Seleccionar]
import java.rmi.RemoteException;
import java.util.ArrayList;

import javax.swing.JOptionPane;

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 {

public static void main(String[] args) throws RemoteException {
ArrayList<String> ips = Util.getIpDisponibles();
String ip = (String) JOptionPane.showInputDialog(
null,
"Seleccione la IP en la que escuchará peticiones el servidor", "IP del servidor",
JOptionPane.QUESTION_MESSAGE,
null,
ips.toArray(),
null
);
String port = (String) JOptionPane.showInputDialog(
null,
"Seleccione el puerto en el que escuchará peticiones el servidor", "Puerto del servidor",
JOptionPane.QUESTION_MESSAGE,
null,
null,
8888
);

Juego modelo = new Juego();
Servidor servidor = new Servidor(ip, Integer.parseInt(port));
try {
servidor.iniciar(modelo);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RMIMVCException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}





Código (java) [Seleccionar]
import java.util.ArrayList;



import java.rmi.RemoteException;
import java.util.ArrayList;

import javax.swing.JOptionPane;
import Controlador.ControladorJuego;
import Vista.ControlVista;
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 static IJuego miJuego;

public static void main(String[] args) throws RemoteException {
ArrayList<String> ips = Util.getIpDisponibles();;
String ip = (String) JOptionPane.showInputDialog(
null,
"Seleccione la IP en la que escuchará peticiones el cliente", "IP del cliente",
JOptionPane.QUESTION_MESSAGE,
null,
ips.toArray(),
null
);
String port = (String) JOptionPane.showInputDialog(
null,
"Seleccione el puerto en el que escuchará peticiones el cliente", "Puerto del cliente",
JOptionPane.QUESTION_MESSAGE,
null,
null,
9999
);
String ipServidor = (String) JOptionPane.showInputDialog(
null,
"Seleccione la IP en la corre el servidor", "IP del servidor",
JOptionPane.QUESTION_MESSAGE,
null,
null,
null
);
String portServidor = (String) JOptionPane.showInputDialog(
null,
"Seleccione el puerto en el que corre el servidor", "Puerto del servidor",
JOptionPane.QUESTION_MESSAGE,
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);
vista.iniciar();
try {
c.iniciar(controlador);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RMIMVCException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}


MOD: Agregadas etiquetas GeSHi.
#8
Hola! Buenas tardes! me sale el error Error: java.lang.NoClassDefFoundError Alguien sabe cual puede ser la causa y como solucionarlo?
#9
Java / Error con arraylist
5 Marzo 2021, 17:33 PM
Hola buenas tardes, me sale el siguiente error:

Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index 2 out of bounds for length 1


Cuando ejecuto este codigo:

public void menuJugador() {
JLabel cartaNum = new JLabel();
cartaNum.setBounds(420,250,120,120);


ImageIcon imagen = new ImageIcon(miControl.getJugador().cartasEnMano.get(indice)+".jpg");
JLabel btn = new JLabel();
btn.setBounds(270,350,120,180);

JLabel turno = new JLabel("Turno de: "+miControl.getJugador().getNombre());
turno.setBounds(0,0,200,20);
panel.add(turno);


JButton boton = new JButton("Siguiente");
boton.setBounds(420,360,100,30);


JButton boton3 = new JButton("Tirar");
boton3.setBounds(420,410,100,30);

JButton boton4 = new JButton("Agrupar");
boton4.setBounds(420,460,100,30);



btn.setIcon(new ImageIcon(imagen.getImage().getScaledInstance(btn.getWidth(),btn.getHeight(),Image.SCALE_SMOOTH)));
panel.add(btn);
panel.add(boton);
panel.add(boton3);
panel.add(boton4);
panel.add(cartaNum);
boton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (indice < miControl.getJugador().cartasEnMano.size()) {
r=indice;
ImageIcon imagen = new ImageIcon(miControl.getJugador().cartasEnMano.get(indice)+".jpg");
cartaNum.setText("Carta numero: "+ indice);
btn.setIcon(new ImageIcon(imagen.getImage().getScaledInstance(btn.getWidth(),btn.getHeight(),Image.SCALE_SMOOTH)));
indice++;

} else {
indice=0;
r=0;
}

}

} );

boton3.addActionListener(new ActionListener() { //al presionar este boton salta el error
public void actionPerformed(ActionEvent e) {
miControl.tirarCarta(r,miControl.getJugador()); ¿
indice=0;
r=0;


}




});

------------------------------------------------------------------------------------------------------------------------------------------


public void tirarCarta( int op, Jugador j) {
//op va a ser la carta a tirar y jugador va a ser el jugador que la tira
mesa.add(j.cartasEnMano.get(op)); //mesa es un arrayList y cartas en mano es un arraylist que
esta en la clase Jugador
j.cartasEnMano.remove(j.cartasEnMano.get(op));


}


Si alguien me puede ayudar se lo agradeceria
#10
Java / java.lang.UnsupportedClassVersionError
17 Febrero 2021, 23:31 PM
Hola, estoy tratando de compilar un codigo y me sale el siguiente error:

Error: LinkageError occurred while loading main class Menu
java.lang.UnsupportedClassVersionError: Menu (class file version 58.65535) was compiled with preview features that are unsupported. This version of the Java Runtime only recognizes preview features for class file version 59.65535

Nose como hacer para solucionarlo, alguien podria ayudarme?

Muchas gracias