changeset 317:221174bcd4ec

BasicService code does not work when placed in the applet constructor.
author Danesh Dadachanji <ddadacha@redhat.com>
date Mon, 19 Dec 2011 15:00:03 -0500
parents 331a58713544
children c5faf63fc34e
files ChangeLog netx/net/sourceforge/jnlp/Launcher.java netx/net/sourceforge/jnlp/runtime/AppletInstance.java
diffstat 3 files changed, 35 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Fri Dec 16 12:12:18 2011 -0500
+++ b/ChangeLog	Mon Dec 19 15:00:03 2011 -0500
@@ -1,3 +1,14 @@
+2011-12-19  Danesh Dadachanji <ddadacha@redhat.com>
+
+	Fix for BasicService being used in applet constructors but not 
+	having access to ApplicationInstance variable.
+	* netx/net/sourceforge/jnlp/Launcher.java: 
+	(createApplet): Moved applet initialization below loader.setApplication,
+	appletInstance is now initialized with applet param as null.
+	* netx/net/sourceforge/jnlp/runtime/AppletInstance.java:
+	(setApplet): New method, allows setting of AppletInstance's applet 
+	only once.
+
 2011-12-16  Deepak Bhole <dbhole@redhat.com>
 
 	Patch from Thomas Meyer <thomas@m3y3r.de>
--- a/netx/net/sourceforge/jnlp/Launcher.java	Fri Dec 16 12:12:18 2011 -0500
+++ b/netx/net/sourceforge/jnlp/Launcher.java	Mon Dec 19 15:00:03 2011 -0500
@@ -708,18 +708,19 @@
 
             ThreadGroup group = Thread.currentThread().getThreadGroup();
 
+            AppletInstance appletInstance;
+            if (cont == null)
+                appletInstance = new AppletInstance(file, group, loader, null);
+            else
+                appletInstance = new AppletInstance(file, group, loader, null, cont);
+
+            loader.setApplication(appletInstance);
+
             String appletName = file.getApplet().getMainClass();
             Class appletClass = loader.loadClass(appletName);
             Applet applet = (Applet) appletClass.newInstance();
-
-            AppletInstance appletInstance;
-            if (cont == null)
-                appletInstance = new AppletInstance(file, group, loader, applet);
-            else
-                appletInstance = new AppletInstance(file, group, loader, applet, cont);
-
-            loader.setApplication(appletInstance);
-
+            appletInstance.setApplet(applet);
+            
             setContextClassLoaderForAllThreads(appletInstance.getThreadGroup(), appletInstance.getClassLoader());
 
             return appletInstance;
--- a/netx/net/sourceforge/jnlp/runtime/AppletInstance.java	Fri Dec 16 12:12:18 2011 -0500
+++ b/netx/net/sourceforge/jnlp/runtime/AppletInstance.java	Mon Dec 19 15:00:03 2011 -0500
@@ -52,6 +52,20 @@
     }
 
     /**
+     * Set the applet of this launched application; 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;
+    }
+
+    /**
      *
      */
     public AppletInstance(JNLPFile file, ThreadGroup group, ClassLoader loader, Applet applet, Container cont) {