2010-02-10 19 views
5

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.

+0

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

Respuesta

4

He tenido problemas al usar la clase de Robot anteriormente. Olvidé exactamente lo que hice, pero ha bloqueado la computadora y me he visto obligado a reiniciar.

+0

Yah, me estoy cansando del reinicio = \ Quizás enfocaré más mi búsqueda en la clase Robot. ¡Gracias! – Ross

2

Esto puede suceder si u activado cualquier protector de pantalla o alguna cosa así, entonces esta acciones del robot dejará de funcionar

Tengo este problema de la siguiente manera

estoy teniendo algunas aplicaciones basadas en GUI y Escribí un código de prueba basado en la clase de Robot.

pero si he activado el protector de pantalla en mi sistema de este casos de prueba dejó de funcionar ...

favor compruebe dichos escenarios con los que cuenta su caso

+0

¿Tu código con Robot dejó de funcionar o todo tu sistema dejó de responder después de que saliste del modo de protector de pantalla? – Ross

+0

el código en el que estoy usando el robot dejó de funcionar – sreejith

0

tenemos dos máquinas con casi exactamente mismo comportamiento con Java aplicaciones.

Una es con Windows 7 de 64 bits, donde Eclipse 64bit y Java 6 (64 bits) están causando exactamente la misma congelación.

Otro es con Windows 7 de 32 bits y la aplicación Java utiliza una gran cantidad de CPU y la actividad del disco que causa la congelación.

Ambas máquinas son portátiles de Toshiba con CPU modernas (Core 2 Duo).

También ambas máquinas tienen el antivirus NOD32 instalado.

aplicaciones estándar (Office, Skype, Firefox, ...)

+0

¿Alguna idea de si las aplicaciones Java que ejecutan utilizan el paquete awt.Robot? Parece que el uso de Robot es la clave del problema que estoy teniendo. – Ross

+1

No estoy seguro, bloques de máquina de 64 bits utilizando Eclipse IDE, incluso durante el proceso de pago. Me parece que generalmente se bloquea durante una E/S de disco un poco más intensa, pero esto podría ser incorrecto. Estoy seguro de que ejecutar Eclipse causa bloques. Por ejemplo, trabajé 10 días sin problemas en la máquina, y tan pronto como comience, el problema de Eclipse reapareció. Reinicie, inicie Eclipse y nuevamente en menos de 5 minutos. – Marko

0

Nos parecen rastreado problema de NOD32. Cuando desactivamos NOD32, parece que el comportamiento ya no ocurre.

Quiero señalar que no creo que sea NOD32 en sí, sino una combinación de Windows 7, Java JDK y NOD32.

+0

Interesante, ciertamente no estoy ejecutando NOD32, pero me alegra que hayas encontrado lo que estaba causando tu problema :) – Ross

1

para Ross, estoy bastante seguro de que tienes un problema de política que significa que no tienes permiso y bloquearse por win7. Para obtener este permiso debe crear una política y esa es una gran historia. Compruebe qué información puede obtener del sitio web de Sun.

Para los demás, si su programa deja de funcionar después de un período de tiempo, es posible que no esté manejando todas las excepciones en el programa correcto. Intente obtener la línea cuando se detenga: puede hacerlo simplemente enviando una línea de texto a la consola del sistema y reescribiéndola para obtener el rendimiento que desea.

Por lo demás, revise su código y compruébelo muy bien para asegurarse de que no está entrando en un bloqueo muerto que podría afectar su PC si tiene algo.

También verifique el uso de la CPU y vea si su programa está sobrecargando si el control de temperatura de la CPU se reiniciará o apagará su PC automáticamente.

Si no llegué al problema, házmelo saber; si resolvió el caso, hágamelo saber lo que hizo.

+1

Ben, ¿conoces alguna referencia que trate sobre problemas con las políticas y permisos de Java que provocan que la visualización deje de renderizarse? Me temo que no puedo encontrar ninguna documentación que sugiera que mi problema está vinculado a la Política o Permiso – Ross

0

Me encontré con un problema similar en Mac OS X 10.6.7 pero no estaba congelando todo el sistema, sino todo el proceso de Java donde se ejecutaba mi aplicación, e interesante de forma aleatoria. Solución alternativa para esto fue llamada:

Toolkit.getDefaultToolkit();

crear Antes de cualquier robot, en el ejemplo:

 
    public static void main(String[] args) {  
     Toolkit.getDefaultToolkit(); 
     //Blah blah 
    } 

misma llamada se hace en init método en Robot clase, así parece que los problemas vienen, este es estúpido y no tiene mucho sentido para mí, pero funciona perfectamente ahora :)

Cuestiones relacionadas