changeset 257:0398f63d1b21

Close the splashscreen in case of error (not just successful launch).
author Denis Lila <dlila@redhat.com>
date Fri, 10 Jun 2011 13:15:00 -0400
parents 6b46e55a8854
children e0741a8c44b6
files ChangeLog netx/net/sourceforge/jnlp/GuiLaunchHandler.java
diffstat 2 files changed, 32 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Fri Jun 10 13:13:02 2011 -0400
+++ b/ChangeLog	Fri Jun 10 13:15:00 2011 -0400
@@ -1,3 +1,14 @@
+2011-06-10  Denis Lila  <dlila@redhat.com>
+
+	* netx/net/sourceforge/jnlp/GuiLaunchHandler.java:
+	(mutex): New mutex for synchronizing splashScreen.
+	(closeSplashScreen): New method to hide and dispose
+	splashScreen.
+	(launchStarting): Call closeSplashScreen instead of doing it
+	inline.
+	(launchInitialized): Sync splashScreen creation.
+	(validationError, launchError): Call closeSplashScreen.
+
 2011-06-10  Denis Lila  <dlila@redhat.com>
 
 	* netx/net/sourceforge/jnlp/cache/DefaultDownloadIndicator.java:
--- a/netx/net/sourceforge/jnlp/GuiLaunchHandler.java	Fri Jun 10 13:13:02 2011 -0400
+++ b/netx/net/sourceforge/jnlp/GuiLaunchHandler.java	Fri Jun 10 13:15:00 2011 -0400
@@ -53,6 +53,7 @@
 public class GuiLaunchHandler implements LaunchHandler {
 
     private JNLPSplashScreen splashScreen = null;
+    private final Object mutex = new Object();
     private UpdatePolicy policy = UpdatePolicy.ALWAYS;
 
     @Override
@@ -65,22 +66,29 @@
         SwingUtilities.invokeLater(new Runnable() {
             @Override
             public void run() {
+                closeSplashScreen();
                 BasicExceptionDialog.show(exception);
             }
         });
     }
 
+    private void closeSplashScreen() {
+        synchronized(mutex) {
+            if (splashScreen != null) {
+                if (splashScreen.isSplashScreenValid()) {
+                    splashScreen.setVisible(false);
+                }
+                splashScreen.dispose();
+            }
+        }
+    }
+
     @Override
     public void launchStarting(ApplicationInstance application) {
         SwingUtilities.invokeLater(new Runnable() {
             @Override
             public void run() {
-                if (splashScreen != null) {
-                    if (splashScreen.isSplashScreenValid()) {
-                        splashScreen.setVisible(false);
-                    }
-                    splashScreen.dispose();
-                }
+                closeSplashScreen();
             }
         });
     }
@@ -98,10 +106,12 @@
                 if (splashImageURL != null) {
                     ResourceTracker resourceTracker = new ResourceTracker(true);
                     resourceTracker.addResource(splashImageURL, file.getFileVersion(), null, policy);
-                    splashScreen = new JNLPSplashScreen(resourceTracker, null, null);
-                    splashScreen.setSplashImageURL(splashImageURL);
-                    if (splashScreen.isSplashScreenValid()) {
-                        splashScreen.setVisible(true);
+                    synchronized(mutex) {
+                        splashScreen = new JNLPSplashScreen(resourceTracker, null, null);
+                        splashScreen.setSplashImageURL(splashImageURL);
+                        if (splashScreen.isSplashScreenValid()) {
+                            splashScreen.setVisible(true);
+                        }
                     }
                 }
             }
@@ -116,6 +126,7 @@
 
     @Override
     public boolean validationError(LaunchException security) {
+        closeSplashScreen();
         DefaultLaunchHandler.printMessage(security);
         return true;
     }