Procházet zdrojové kódy

Fixed the WelcomeScreen to be Multithreaded, now the SDK will launch before the timeout even when the wiki is down.

MeFisto94 před 9 roky
rodič
revize
90abfdbe17

+ 48 - 14
jme3-welcome-screen/src/com/jme3/gde/welcome/WelcomeScreenTopComponent.java

@@ -7,10 +7,12 @@ package com.jme3.gde.welcome;
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLConnection;
 import java.util.logging.Level;
 import java.util.logging.Logger;
+import javax.swing.SwingUtilities;
 import javax.swing.event.HyperlinkEvent;
 import javax.swing.event.HyperlinkListener;
 import org.netbeans.api.settings.ConvertAsProperties;
@@ -47,7 +49,7 @@ autostore = false)
     "HINT_WelcomeScreenTopComponent=Shows news and information about your SDK"
 })
 public final class WelcomeScreenTopComponent extends TopComponent implements HyperlinkListener {
-
+    private static Thread checkOpenThread;
     private static final Logger logger = Logger.getLogger(WelcomeScreenTopComponent.class.getName());
     private static final HelpCtx ctx = new HelpCtx("com.jme3.gde.core.about");
 //    private final RssFeedParser parser = new RssFeedParser(org.openide.util.NbBundle.getMessage(WelcomeScreenTopComponent.class, "WelcomeScreenTopComponent.rss.link"));
@@ -65,22 +67,47 @@ public final class WelcomeScreenTopComponent extends TopComponent implements Hyp
 
     public void loadPage() {
         try {
-            URL startUrl = new URL(org.openide.util.NbBundle.getMessage(WelcomeScreenTopComponent.class, "WelcomeScreenTopComponent.http.link"));
+            do {
+                try {
+                    Thread.sleep(100);
+                } catch (Exception ex) {}
+            }
+            while (checkOpenThread == null || checkOpenThread.isAlive()); /* Wait for first getModified (static executed from NB) to finish */
+            
+            final URL startUrl = new URL(org.openide.util.NbBundle.getMessage(WelcomeScreenTopComponent.class, "WelcomeScreenTopComponent.http.link"));
             long lastMod = getModified(startUrl);
             NbPreferences.forModule(getClass()).putLong("LAST_PAGE_UPDATE", lastMod);
-            jEditorPane1.setPage(startUrl);
-        } catch (IOException ex) {
-            logger.log(Level.INFO, "Loading welcome page from web failed", ex);
-            try {
-                jEditorPane1.setPage(new URL(org.openide.util.NbBundle.getMessage(WelcomeScreenTopComponent.class, "WelcomeScreenTopComponent.local.link")));
-            } catch (IOException ex1) {
-                logger.log(Level.SEVERE, "Could not open local help page!", ex1);
-            }
+            
+            SwingUtilities.invokeLater( new Runnable() {
+                @Override        
+                public void run() {
+                    try {    
+                        jEditorPane1.setPage(startUrl);
+                    } catch (IOException ex) {
+                        logger.log(Level.INFO, "Loading welcome page from web failed", ex);
+                        try {
+                            jEditorPane1.setPage(new URL(org.openide.util.NbBundle.getMessage(WelcomeScreenTopComponent.class, "WelcomeScreenTopComponent.local.link")));
+                        } catch (IOException ex1) {
+                            logger.log(Level.SEVERE, "Could not open local help page!", ex1);
+                        }
+                    }
+                } 
+            });
+        }
+        catch (MalformedURLException ex)
+        {
+            logger.log(Level.SEVERE, "Could not build URL since it's malformed!", ex);
         }
     }
 
     public static void checkOpen() {
-        checkOpen(0);
+        checkOpenThread = new Thread(new Runnable() {
+            @Override
+            public void run() {
+                checkOpen(0);
+            }
+        }, "WelcomeScreenCheckOpenThread");
+        checkOpenThread.start();
     }
 
     public static void checkOpen(long lastMod) {
@@ -106,6 +133,7 @@ public final class WelcomeScreenTopComponent extends TopComponent implements Hyp
 
     }
 
+    @Override
     public void hyperlinkUpdate(HyperlinkEvent he) {
         if (he.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
             try {
@@ -158,9 +186,10 @@ public final class WelcomeScreenTopComponent extends TopComponent implements Hyp
             logger.log(Level.INFO, "Reading welcome page content from web failed", ex);
         } finally {
             try {
-                in.close();
+                if (in != null)
+                    in.close();
             } catch (IOException ex) {
-            logger.log(Level.INFO, "Closing reader for welcome page content from web failed", ex);
+                logger.log(Level.INFO, "Closing reader for welcome page content from web failed", ex);
             }
         }
         return "";
@@ -228,7 +257,12 @@ public final class WelcomeScreenTopComponent extends TopComponent implements Hyp
 
     @Override
     public void componentOpened() {
-        loadPage();
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                loadPage();
+            }
+        }, "WelcomeScreenOpenedThread").start();
     }
 
     @Override