Foros del Web » Programación para mayores de 30 ;) » Java »

Problema con JMenu

Estas en el tema de Problema con JMenu en el foro de Java en Foros del Web. Bueno, por fin he terminado mi juego de tetris. En la versión que tengo actualmente nada más abrir el programa se pone a jugar, con ...
  #1 (permalink)  
Antiguo 26/10/2014, 03:55
(Desactivado)
 
Fecha de Ingreso: marzo-2012
Mensajes: 366
Antigüedad: 12 años, 1 mes
Puntos: 31
Problema con JMenu

Bueno, por fin he terminado mi juego de tetris.

En la versión que tengo actualmente nada más abrir el programa se pone a jugar, con las fichas ya bajando... y eso es porque este es mi void main:

Código:
public static void main(String[] args){
	new base();
	juego juego1=new juego();
	juego1.yajuego();
}
en mi clase base tengo todos los elementos del tetris, paneles, marcadores, etc.
Y la clase juego es la clase que tiene toda la logística y los métodos que hacen funcionar el tetris.

Ahora he añadido en la clase base un menú, y le he añadido el actionlistener a dicho menú.

Y este es mi action Listener:

Código:
public void actionPerformed(ActionEvent arg0) {
	System.out.println("Menú seleccionado: \""+arg0.getActionCommand()+"\"");
}
Así pues, el menú lo único que hace cuando le doy al menú "Jugar" es decirme en la consola: Menú seleccionado: "Jugar"

Ahora bien, y he aquí el problema que estoy teniendo.

Si muevo las líneas:

Código:
juego juego1=new juego();
juego1.yajuego();
desde el void main a dentro del ActionListener de la siguiente manera:
Código:
public void actionPerformed(ActionEvent arg0) {
	if (arg0.getActionCommand()=="Salir")System.out.println("Saliendo");System.exit(0);
	if (arg0.getActionCommand()=="Jugar"){
		juego juego1=new juego();
		juego1.yajuego();
	}
}
Entonces al iniciar el juego no hace nada, y al ir al menú y seleccionar el menú jugar se me queda colgado.

Sin embargo, el otro menú "Salir" si me lo hace bien. Me escribe en la consola "Saliendo" y luego sale del programa. Por esto último creo que no es un problema del actionListener y no se me ocurre donde pueda estar el problema.

Última edición por Kritik; 26/10/2014 a las 04:08
  #2 (permalink)  
Antiguo 27/10/2014, 02:22
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Problema con JMenu

Buenas,

Cita:
arg0.getActionCommand()=="Salir"
En java los objetos (como String) se comparan utilizando el metodo equals. Cuando comparas con == lo que estas haciendo es comparar las referencias (las direcciones de memoria).


Código Java:
Ver original
  1. public void actionPerformed(ActionEvent arg0) {
  2.     if ("Salir".equals(arg0.getActionCommand()))System.out.println("Saliendo");System.exit(0);
  3.     if ("Jugar".equals(arg0.getActionCommand())){
  4.         juego juego1=new juego();
  5.         juego1.yajuego();
  6.     }
  7. }


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 27/10/2014, 14:57
(Desactivado)
 
Fecha de Ingreso: marzo-2012
Mensajes: 366
Antigüedad: 12 años, 1 mes
Puntos: 31
Respuesta: Problema con JMenu

No es un problema del menú, y tampoco del método de comparación, pues he probado ambas formas tanto en menú como en un botón... y los 2 reaccionan de la misma manera. Se cuelga el programa.

Sin embargo, si lo ejecuto directamente poniéndolo en el void main entonces no se cuelga. No entiendo la razón.
  #4 (permalink)  
Antiguo 28/10/2014, 01:19
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Problema con JMenu

Buenas,

Yo solo puedo comentar sobre lo que veo. Esas comparaciones no son correctas como te comento. Otra cosa es que puedan funcionar porque la implementacion de tu maquina virtual implemente un pool de literales, pero eso es otra historia.

La otra cosa que veo es que no inicializas la aplicacion swing (entiendo que es Swing por los eventos que has puesto) correctamente.

A mi me tiene pinta de que estas dejando colgado el EDT y por eso no responde, pero sin ver el codigo es imposible de adivinar.


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #5 (permalink)  
Antiguo 28/10/2014, 16:23
(Desactivado)
 
Fecha de Ingreso: marzo-2012
Mensajes: 366
Antigüedad: 12 años, 1 mes
Puntos: 31
Respuesta: Problema con JMenu

Como se inicializan las aplicaciones swing? Podría ser eso y estar funcionando poniendo la clase con su método en el void main?
  #6 (permalink)  
Antiguo 29/10/2014, 00:56
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Problema con JMenu

La lectura de este tutorial es fundamental para entender Swing:
http://docs.oracle.com/javase/tutori...y/initial.html

Como ahí se indica la forma correcta de iniciar es:
Código Java:
Ver original
  1. SwingUtilities.invokeLater(new Runnable() {
  2.     public void run() {
  3.         createAndShowGUI();
  4.     }
  5. });

Con lambdas sería:
Código Java:
Ver original
  1. EventQueue.invokeLater(() -> {createAndShowGUI();});

Todos los eventos de la interfaz gráfica de una aplicación Swing se ejecutan en un thread especial llamado el EDT (Event Dispatch Thread). Si por algún motivo este thread se colapsa haciendo alguna tarea pesada, la aplicación se congelará y no responderá a los eventos.

Un saludo
__________________
If to err is human, then programmers are the most human of us

Etiquetas: clase, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:55.