jdk - La actualización 25 de Java 7 hace que nuestra aplicación java web start falle sin iniciar sesión
java jdk (1)
Finalmente, el problema fue resuelto. El problema se debió a una falta de coincidencia en los archivos jar incluidos en el archivo MANIFEST.MF principal frente a los archivos jar mencionados en launch.jnlp.
Aparentemente ahora se requiere que todos los archivos jar que se utilizarán también estén presentes en el archivo launch.jnlp.
(En el pasado, se decidió mantener este archivo manualmente en el receptor, lo que obviamente no siempre se mantuvo de manera adecuada. Ahora, este proceso es automático, por lo que el problema ya no debería pasarnos).
Desde la actualización 7 de java 7 lanzada por Oracle, nuestra aplicación ya no funciona.
Inicialmente recibimos algunas advertencias sobre la falta de etiquetas de base de código y seguridad en el archivo Manifest, que hemos corregido.
El problema con el que ahora terminamos es que en la consola solo obtenemos las siguientes líneas:
#### Java Web Start Error:
#### null
También obtenemos un diálogo de Error de aplicación con el mensaje: No se puede iniciar la aplicación .
El botón de detalles proporciona los siguientes detalles en la excepción:
java.lang.NullPointerException
at com.sun.jnlp.JNLPClassLoader.getPermissions(Unknown Source)
at java.security.SecureClassLoader.getProtectionDomain(SecureClassLoader.java:206)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at com.sun.jnlp.JNLPClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at desktop.DesktopProxySelector.<init>(DesktopProxySelector.java:24) <- code smippet below
at desktop.Main.main(Main.java:139) <- code smippet below
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.sun.javaws.Launcher.executeApplication(Unknown Source)
at com.sun.javaws.Launcher.executeMainClass(Unknown Source)
at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
at com.sun.javaws.Launcher.run(Unknown Source)
at java.lang.Thread.run(Thread.java:724)
Las partes del código relevantes son:
Desktop.Main.main
/**
* Main method, starts the application
*/
public static void main(String[] args) {
System.setProperty("java.net.useSystemProxies", "true");
//Logger.getLogger("httpclient.wire.header.level").setLevel(Level.FINEST);
//Logger.getLogger("org.apache.commons.httpclient.level").setLevel(Level.FINEST);
java.net.ProxySelector.setDefault(new DesktopProxySelector(java.net.ProxySelector.getDefault()));
(La última línea es la línea número 139)
desktop.DesktopProxySelector:
public class DesktopProxySelector extends ProxySelector {
public DesktopProxySelector(ProxySelector defaultSelector) {
URI httpsUri = new CentralConfigurationService().getCentralLocation();
(La última línea es la línea 24 donde se produce la excepción)
¿Puede alguien darnos algunas pistas pistas (o mejor una solución) para este nuevo comportamiento de Java causado por esta actualización ''menor''.
Cuando ejecutamos la aplicación directamente desde el cli usando java -jar Desktop.jar, la aplicación ejecutará el archivo, por lo que el problema tiene claramente algo que ver con los cambios en java web start.
@trashgod: el error claramente tiene algo que ver con el cambio de permisos en 7u25, ya que la excepción NullPointerException ocurre en com.sun.jnlp.JNLPClassLoader.getPermissions.
Solo para explicar lo que creo que sucede (soy un colega de Wouter): escritorio. Principal crea una instancia de escritorio. DesktopProxySelector (nuestra clase), desktop.DesktopProxySelector crea una instancia de desktop.configuration.CentralConfigurationService desktop.configuration.CentralConfigurationService crea una instancia de java.net.URI .
En la primera línea del inicio de DesktopProxySelector donde se crea una instancia de CentralConfigurationService, el método getPermissions, llamado por JNLPClassLoader, arroja la NullPointerException. Entonces, algo va mal al cargar la clase CentralConfigurationService por java webstart y obtener los permisos para la clase. ¿Podría tener algo que ver con el hecho de que una clase de URI está instanciada, lo que requiere permisos adicionales (se configura una conexión a un uri remoto)?