¿Qué causa una recursión sin fin en AWTEventMulticaster.mouseEntered ()?

He estado haciendo JFrame durante un tiempo, y desde que comencé a usar Mouselistener (o cualquier lista de eventos) las cosas funcionarían sin problemas durante unos 2 minutos más o menos. Entonces obtendría un montón de errores repetidos, el programa aún se ejecutaría pero podría usar cualquier eventlistener. El error es básicamente esto: ...

(no se pudo alcanzar la línea superior a tiempo, pero algo como Excepción en el hilo "AWT-EventQueue-0" java.lang.StackOverflowError) (seguido de)

at java.awt.AWTEventMulticaster.mouseEntered(AWTEventMulticaster.java:282)
    at java.awt.AWTEventMulticaster.mouseEntered(AWTEventMulticaster.java:282)
    at java.awt.AWTEventMulticaster.mouseEntered(AWTEventMulticaster.java:282)
    at java.awt.AWTEventMulticaster.mouseEntered(AWTEventMulticaster.java:282)
    at java.awt.AWTEventMulticaster.mouseEntered(AWTEventMulticaster.java:282)
    at java.awt.AWTEventMulticaster.mouseEntered(AWTEventMulticaster.java:282)
    at java.awt.AWTEventMulticaster.mouseEntered(AWTEventMulticaster.java:282)
    at java.awt.AWTEventMulticaster.mouseEntered(AWTEventMulticaster.java:282)
    at java.awt.AWTEventMulticaster.mouseEntered(AWTEventMulticaster.java:282)
    at java.awt.AWTEventMulticaster.mouseEntered(AWTEventMulticaster.java:282)
    at java.awt.AWTEventMulticaster.mouseEntered(AWTEventMulticaster.java:282)
...

que se repite durante cientos de cientos de líneas, donde mouseEntered podría ser cualquiera de los organizadores de eventos.

Ya he pasado mucho tiempo revisando todos los enteros para ver si van demasiado altos (encontré uno, lo arreglé, todavía sucede). También he verificado en todas partes un valor que se llama a sí mismo, pero eso no tiene mucho sentido porque sucede como 2 minutos.

No creo que tenga que ver con ningún código específico, solo dime qué significa y cómo podría solucionarlo.

Respuesta 1

Supongo que la razón más probable para esto es que ha puesto un componente en sí mismo (ya sea directa o indirectamente).

Respuesta: 2

Como se señaló anteriormente, tiene un error en su código puro y simple y hasta que nos muestre este código, dudo que podamos hacer algo más que adivinar. Dicho esto, mi conjetura de SWA es que estás haciendo una recursión, posiblemente sin saberlo, quizás agregando un MouseListener a un componente GUI desde el mismo MouseListener.

De todos modos, hágase un favor a usted y a todos nosotros y muestre el código pertinente, ya que a la mayoría de nosotros no nos gusta adivinar.

Respuesta: 3

Tuve un caso similar, y aunque la pregunta podría formularse mejor, me ayudó porque Hovercraft [^ s] +? S dio una buena pista (recursividad).

Tal problema no puede aislarse en un código simple, probablemente. Al menos en mi caso, ocurrió en una aplicación compleja, con muchos componentes Swing anidados, incluidos JInternalFrames, envueltos en clases propietarias, etc.

En nuestro caso, aún no resuelto por completo, tuvimos una mala gestión de los oyentes del mouse (lote agregado en cada componente de un panel para manejar el mismo menú contextual en lugar de tener una administración más global), y los oyentes se agregaron y eliminaron dependiendo del usuario operaciones
De todos modos, sospecho que en algún lugar agregamos muchos oyentes (¡realmente muchos!) Sin eliminarlo adecuadamente. En las operaciones normales, no tenemos que eliminarlos, se hace automáticamente cuando se desecha el componente, pero aquí los oyentes se agregan y se agregan sin desechar el componente. Y el desbordamiento de la pila es probablemente solo una iteración en una pila muy profunda ...

Estoy trabajando en analizar el código para evitar que todos estos oyentes inútiles agreguen (¿quizás detectar si está allí antes de agregarlo?). De todos modos, en la pequeña posibilidad de que el análisis anterior pueda ser útil para alguien con un caso similar, lo expongo allí.

Respuesta: 4

En mi experiencia, agregar repetidamente un control dado al mismo padre y luego llamar a doLayout () puede causar un desbordamiento de la pila con AWTEventMulticaster, sin embargo, esto podría ser solo un error en una versión específica de Java. (jdk_1.6.18) Y esta operación de volver a agregar puede parecer una tontería, pero fue un efecto secundario de la reutilización de componentes.

AWTEventMulticaster se utiliza para la propagación del movimiento de control / cambio de tamaño y el procesamiento KeyEvent. Verifique las operaciones relacionadas.

Respuesta: 5

En una aplicación que estoy desarrollando, estoy tratando de crear programáticamente un ImageButton que es una copia del ImageButton seleccionado, pero la imagen se colorea de una manera diferente, digamos rojo. Si uso el ...

No entendí por qué en este código que calcula las potencias de 2, la e se disminuye dentro del ciclo while: public class Power {public static void main (String [] args) {int e; ...

Estoy usando el siguiente código para enviar datos a un servidor TCP. Supongo que necesito usar socket.shutdownOutput () para indicar correctamente que el cliente ha terminado de enviar la solicitud. Es mi suposición ...

Esto es lo que hago con eclipse: Crear un nuevo proyecto de Papyrus Crear un diagrama de clase en Papyrus Crear un nuevo proyecto vacío EMF Usar el Modelo de generador EMF para convertir mi archivo .uml (creado con ...