changeset 329:2dd44d3ad58d

Fix regression in broken AppletTest.
author Danesh Dadachanji <ddadacha@redhat.com>
date Mon, 13 Feb 2012 11:30:23 -0500
parents 1b11cb5cd396
children c959afd1eba7
files ChangeLog netx/net/sourceforge/jnlp/Launcher.java netx/net/sourceforge/jnlp/runtime/AppletEnvironment.java
diffstat 3 files changed, 29 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Thu Feb 02 16:15:27 2012 -0500
+++ b/ChangeLog	Mon Feb 13 11:30:23 2012 -0500
@@ -1,3 +1,11 @@
+2012-02-06  Danesh Dadachanji  <ddadacha@redhat.com>
+
+	Fixed regression in running webstart applets from JNLP files.
+	* netx/net/sourceforge/jnlp/Launcher.java (createApplet): Added call to
+	set applet variable in the AppletInstance's AppletEnvironment.
+	* netx/net/sourceforge/jnlp/runtime/AppletEnvironment.java
+	(setApplet): New method, set AppletEnvironment's applet variable only once.
+
 2012-02-02  Danesh Dadachanji  <ddadacha@redhat.com>
 
 	* netx/net/sourceforge/jnlp/LaunchException.java: Fix message
--- a/netx/net/sourceforge/jnlp/Launcher.java	Thu Feb 02 16:15:27 2012 -0500
+++ b/netx/net/sourceforge/jnlp/Launcher.java	Mon Feb 13 11:30:23 2012 -0500
@@ -708,6 +708,9 @@
 
             ThreadGroup group = Thread.currentThread().getThreadGroup();
 
+            // appletInstance is needed by ServiceManager when looking up 
+            // services. This could potentially be done in applet constructor
+            // so initialize appletInstance before creating applet.
             AppletInstance appletInstance;
             if (cont == null)
                 appletInstance = new AppletInstance(file, group, loader, null);
@@ -716,10 +719,14 @@
 
             loader.setApplication(appletInstance);
 
+            // Initialize applet now that ServiceManager has access to its
+            // appletInstance.
             String appletName = file.getApplet().getMainClass();
             Class appletClass = loader.loadClass(appletName);
             Applet applet = (Applet) appletClass.newInstance();
+            // Finish setting up appletInstance.
             appletInstance.setApplet(applet);
+            appletInstance.getAppletEnvironment().setApplet(applet);
             
             setContextClassLoaderForAllThreads(appletInstance.getThreadGroup(), appletInstance.getClassLoader());
 
--- a/netx/net/sourceforge/jnlp/runtime/AppletEnvironment.java	Thu Feb 02 16:15:27 2012 -0500
+++ b/netx/net/sourceforge/jnlp/runtime/AppletEnvironment.java	Mon Feb 13 11:30:23 2012 -0500
@@ -207,6 +207,20 @@
     }
 
     /**
+     * Set the applet of this environment; can only be called once.
+     */
+    public void setApplet(Applet applet) {
+        if (this.applet != null) {
+            if (JNLPRuntime.isDebug()) {
+                Exception ex = new IllegalStateException("Applet can only be set once.");
+                ex.printStackTrace();
+            }
+            return;
+        }
+        this.applet = applet;
+    }
+
+    /**
      * Returns an enumeration that contains only the applet
      * from the JNLP file.
      */