diff options
-rw-r--r-- | ChangeLog | 11 | ||||
-rw-r--r-- | netx/net/sourceforge/jnlp/GuiLaunchHandler.java | 31 |
2 files changed, 32 insertions, 10 deletions
@@ -1,5 +1,16 @@ 2011-06-10 Denis Lila <[email protected]> + * 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 <[email protected]> + * netx/net/sourceforge/jnlp/cache/DefaultDownloadIndicator.java: (frameMutex): New mutex to synchronize accesses to "frame". (getListener): Make almost all of it synchronized on frameMutex. diff --git a/netx/net/sourceforge/jnlp/GuiLaunchHandler.java b/netx/net/sourceforge/jnlp/GuiLaunchHandler.java index 28a2013..90fe15c 100644 --- a/netx/net/sourceforge/jnlp/GuiLaunchHandler.java +++ b/netx/net/sourceforge/jnlp/GuiLaunchHandler.java @@ -53,6 +53,7 @@ import net.sourceforge.jnlp.util.BasicExceptionDialog; 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 @@ public class GuiLaunchHandler implements LaunchHandler { 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 @@ public class GuiLaunchHandler implements LaunchHandler { 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 @@ public class GuiLaunchHandler implements LaunchHandler { @Override public boolean validationError(LaunchException security) { + closeSplashScreen(); DefaultLaunchHandler.printMessage(security); return true; } |