He escrito una aplicación Java que permite a los usuarios escribir la entrada del mouse/teclado (JMacro, enlace no importante, solo para curiosos). Personalmente uso la aplicación para automatizar las acciones de los personajes en un juego en línea durante la noche mientras duermo. Lamentablemente, vuelvo a la computadora por la mañana para encontrar que no responde. Tras realizar más pruebas, descubro que mi aplicación hace que la computadora deje de responder después de aproximadamente 10 minutos de tiempo de inactividad del usuario (incluso si la aplicación simula la actividad del usuario). Parece que no puedo señalar el problema, así que espero que alguien más tenga una sugerencia sobre dónde mirar o qué podría estar causando el problema.La aplicación Java hace que la pantalla no responda después de 10 minutos de tiempo de inactividad
Los síntomas relevantes y características:
- Falta de respuesta se produce cuando el usuario está inactivo durante 10 minutos
- usuario puede mover el puntero del ratón por la pantalla
- Todo menos el ratón parece congelada. .. los clics del mouse no tienen ningún efecto y ninguna aplicación actualiza sus pantallas, incluyendo el escritorio de Windows 7
- Dejé el administrador de tareas junto con la aplicación durante la noche para poder ver t La última imagen del administrador de tareas antes de que se congele la pantalla ... la aplicación Java tiene un uso normal de CPU/memoria y el uso total de la CPU es solo ~ 1%
- Después de mover el mouse (en otras palabras, el usuario vuelve de estar inactivo), la imagen de la pantalla comienza a actualizarse de nuevo en 30 minutos (esto es muy al azar ... a veces 10 minutos, a veces sin resultados después de dos horas)
- El usuario puede CTRL-ALT-DEL para llegar a CTRL-ALT de Windows 7 -DEL pantalla (después de una pausa de 30 segundos). El usuario aún puede mover el puntero del mouse, pero al hacer clic en cualquiera de las opciones del botón la pantalla se congelará nuevamente
- En algunas ocasiones muy raras, el sistema nunca se congela, y vuelvo a él por la mañana con plena capacidad de respuesta
- La aplicación Java detiene automáticamente las secuencias de comandos de entrada en el medio de la noche, por lo que Windows 7 detecta la inactividad "real" y pone los monitores en modo de espera ... que salen al mover el mouse manualmente en la mañana cuando Me despierto, aunque la pantalla del escritorio aún aparece congelada
Dado los síntomas y características del problema, es como si la aplicación Java estuviera causando la visualización del escritorio del usuario conectado para detener la actualización, incluidas las aplicaciones en ejecución.
conceptos de programación y paquetes de Java utilizadas:
- multi-threading
- estándar cabo y err se redirigen a un javax.swing.JTextArea
- La aplicación utiliza un columpio GUI
- awt.Robot (muy utilizado)
- awt.PointerInfo
- awt.MouseInfo
Especificaciones del sistema:
- Windows 7 Professional
- Java 1.6.0 u17
En conclusión, debo subrayar que no estoy en busca de cualquier específica soluciones, ya que no estoy haciendo una pregunta muy específica. Me pregunto si alguien se encontró con un problema similar al usar las bibliotecas Java que estoy usando. También agradecería gustosamente cualquier sugerencia para tratar de tratar de determinar con mayor precisión qué está causando mi problema.
Gracias!
Ross
PS, voy a publicar una actualización/respuesta si me las arreglo para toparse con cualquier otra cosa mientras sigo a depurar este.
Actualización: mi aplicación implicaba procesos de subprocesos múltiples inicializando sus propios objetos de robot y creando eventos de entrada de forma asíncrona. Refactoricé la aplicación para que solo contuviera un objeto singleton de Robot, pero los diferentes procesos aún invocan asíncronamente los comandos de entrada. Por lo que puedo decir, esto no cambió el comportamiento de mi aplicación. Mi siguiente paso podría ser crear un contenedor sincronizado alrededor del singleton de Robot para ver si eso ayuda, pero teniendo en cuenta los síntomas, no sé por qué lo haría.
Para saber más qué causa el problema, ¿has probado lo mismo en otro sistema, como XP? ¿Eres capaz de ejecutar la aplicación desde un depurador, que se detendría en cualquier excepción? Pueden parecer puntos obvios, pero nunca está de más comprobar tales cosas. – Gnoupi