Al mostrar un JPopupMenu se me bloquea el applet
Hola! ¿Alguien puede ayudarme y decirme por qué puede pasarme esto?
Tengo un JPanel dentro de un JScrollPane en un JApplet. A este panel interior le añado un MouseListener para crear un popup cuando se pinche con el botón derecho del ratón. Pues bien, cuando se pincha en el panel, el applet se bloquea en la función
popup.show(this,e.getX(),e.getY());
Donde "this" es el panel interior del scrollpane.
El caso es que cuando paro la ejecución del resto de los threads del applet de repente se me abren popups tantas veces como habÃa pinchado en el panel. Por esto parece que los eventos se quedan como a la espera de algo, pero no sé qué es.
También he comprobado que si llamo a la función con argumento null
popup.show(null,e.getX(),e.getY());
todo funciona correctamente, pero claro, el popup aparece perdido por la pantalla y es dificil de encontrar.
Buf, espero haberme explicado bien. ¿Alguien tiene alguna remota idea de lo que puede estar pasando?
Tengo un JPanel dentro de un JScrollPane en un JApplet. A este panel interior le añado un MouseListener para crear un popup cuando se pinche con el botón derecho del ratón. Pues bien, cuando se pincha en el panel, el applet se bloquea en la función
popup.show(this,e.getX(),e.getY());
Donde "this" es el panel interior del scrollpane.
El caso es que cuando paro la ejecución del resto de los threads del applet de repente se me abren popups tantas veces como habÃa pinchado en el panel. Por esto parece que los eventos se quedan como a la espera de algo, pero no sé qué es.
También he comprobado que si llamo a la función con argumento null
popup.show(null,e.getX(),e.getY());
todo funciona correctamente, pero claro, el popup aparece perdido por la pantalla y es dificil de encontrar.
Buf, espero haberme explicado bien. ¿Alguien tiene alguna remota idea de lo que puede estar pasando?
La verdad no entendi muy bien pero intenta ajustar las prioridades de tus hilos y/o definir los hilos como demonios.
Gracias a los dos por contestar. No consigo que me aparezca el menú, y ya no sé qué más hacer. Ya habÃa probado a crear un nuevo thread para hacerlo aparecer, pero no funciona. Y si este nuevo thread lo llamo con invokeLater() tampoco.
Creo que el problema está en: el argumento que le paso a la función de crear el menú de popup, es un panel con una función paint() definida por mÃ.
Además el popup se crea desde el thread de repintado de Swing, ya que se crea al pinchar en el panel con el ratón.
Es decir, que al pinchar con el ratón, se llama a la función de crear el menú, y además en algún momento también se llama a la función de repintado creada por mÃ. Creo que esta es la causa de que la aplicación se quede bloqueada.
El caso es que aparte de esto, existe un único thread más en la aplicación: uno que se encarga de escuchar un socket. Pues bien, cuando paro este thread, el menú se muestra sin ningún problema.
Estoy empezando a pensar que quizá sea un bug o algo asà de java, porque esto parece de magia. Gracias otra vez por la ayuda.
Creo que el problema está en: el argumento que le paso a la función de crear el menú de popup, es un panel con una función paint() definida por mÃ.
Además el popup se crea desde el thread de repintado de Swing, ya que se crea al pinchar en el panel con el ratón.
Es decir, que al pinchar con el ratón, se llama a la función de crear el menú, y además en algún momento también se llama a la función de repintado creada por mÃ. Creo que esta es la causa de que la aplicación se quede bloqueada.
El caso es que aparte de esto, existe un único thread más en la aplicación: uno que se encarga de escuchar un socket. Pues bien, cuando paro este thread, el menú se muestra sin ningún problema.
Estoy empezando a pensar que quizá sea un bug o algo asà de java, porque esto parece de magia. Gracias otra vez por la ayuda.
Bueno, aunque parezca increÃble, al final he resuelto el problema sustituyendo el JPopupMenu por un JOptionPane.... Sé que visualmente no es lo mismo, pero asà no se me produce ningún tipo de problema... IncreÃble pero cierto. Aún asÃ, me encantarÃa saber por qué pasan este tipo de cosas en Java. ¿Alguien tiene alguna remota idea?
Saludos.
Saludos.