¿Tengo que llamar explícitamente a System.exit () en una aplicación Webstart?
Recientemente he convertido una aplicación Swing a Webstart. El proceso fue bastante sencillo, pero descubrí que después de cerrar todas las ventanas, la JVM de mi aplicación no finalizó. El volcado de subprocesos mostró que hay un par de subprocesos no daemon, en particular, EDT de Swing, AWT y un par de subprocesos relacionados con websart.
La estrategia real utilizada es que cada ventana incrementa un contador cuando se crea y disminuye uno cuando se cierra. La operación de cierre predeterminada es DISPOSE_ON_CLOSE. Cuando el contador llega a cero, detengo todos los subprocesos y libero todos los recursos JNI.
Cuando inicié la aplicación desde un archivo bat (los mismos JAR), terminó bien cuando se cerraron todas las ventanas, por lo que pensé que el problema tiene algo que ver con Webstart.
Ahora las preguntas:
¿Alguien puede decirme qué es exactamente lo que está pasando? ¿Por qué Webstart deja zombis JVMs?¿Hay una manera de liberar los recursos de Webstart explícitamente sin detener la JVM?Siempre he tenido la opinión de que llamar a System.exit () fomenta la práctica descuidada de no liberar sus recursos y confiar en el sistema operativo para limpiar después de usted (lo que puede provocar sorpresas desagradables si reutiliza el código más adelante) ... ¿Me estoy perdiendo de algo?Ver también lasiguiente pregunta para detectar si la aplicación ha sido lanzada por Webstart.