changeset 181:42a918844ccd

Bug 3261: Cannot start FXAnalyzer when HeapStatsFXAnalyzer.main() is called directly Reviewed-by: ykubota https://github.com/HeapStats/heapstats/pull/59
author Yasumasa Suenaga <yasuenag@gmail.com>
date Mon, 12 Dec 2016 22:29:55 +0900
parents ad9e1645ff33
children 433e4bcd41ad
files ChangeLog analyzer/fx/src/main/java/jp/co/ntt/oss/heapstats/WindowController.java analyzer/fx/src/main/java/jp/co/ntt/oss/heapstats/utils/HeapStatsUtils.java
diffstat 3 files changed, 20 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Mon Dec 12 22:18:39 2016 +0900
+++ b/ChangeLog	Mon Dec 12 22:29:55 2016 +0900
@@ -1,6 +1,7 @@
 2016-12-12  Yasumasa Suenaga <yasuenag@gmail.com>
 
 	* Bug 3260: Cannot run FXAnalyzer via Maven task without NetBeans
+	* Bug 3261: Cannot start FXAnalyzer when HeapStatsFXAnalyzer.main() is called directly 
 
 2016-12-07  Yasumasa Suenaga <yasuenag@gmail.com>
 
--- a/analyzer/fx/src/main/java/jp/co/ntt/oss/heapstats/WindowController.java	Mon Dec 12 22:18:39 2016 +0900
+++ b/analyzer/fx/src/main/java/jp/co/ntt/oss/heapstats/WindowController.java	Mon Dec 12 22:29:55 2016 +0900
@@ -279,14 +279,7 @@
         this.hostServices = hostServices;
     }
 
-    /**
-     * Load plugins which is defined in heapstats.properties.
-     */
-    public void loadPlugin(){
-        String resourceName = "/" + this.getClass().getName().replace('.', '/') + ".class";
-        String appJarString = this.getClass().getResource(resourceName).getPath();
-        appJarString = appJarString.substring(0, appJarString.indexOf('!')).replaceFirst("file:", "");
-
+    private ClassLoader createPluginClassLoader(String appJarString){
         Path appJarPath;
 
         try{
@@ -317,7 +310,19 @@
             Logger.getLogger(WindowController.class.getName()).log(Level.SEVERE, null, ex);
         }
 
-        pluginClassLoader = (jarURLList == null) ? WindowController.class.getClassLoader() : new URLClassLoader(jarURLList);
+        return (jarURLList == null) ? WindowController.class.getClassLoader() : new URLClassLoader(jarURLList);
+    }
+
+    /**
+     * Load plugins which is defined in heapstats.properties.
+     */
+    public void loadPlugin(){
+        String resourceName = "/" + this.getClass().getName().replace('.', '/') + ".class";
+        String appJarString = this.getClass().getResource(resourceName).getPath();
+
+        pluginClassLoader = appJarString.contains("!") ? createPluginClassLoader(appJarString.substring(0, appJarString.indexOf('!')).replaceFirst("file:", ""))
+                                                       : WindowController.class.getClassLoader();
+
         FXMLLoader.setDefaultClassLoader(pluginClassLoader);
 
         List<String> plugins = HeapStatsUtils.getPlugins();
--- a/analyzer/fx/src/main/java/jp/co/ntt/oss/heapstats/utils/HeapStatsUtils.java	Mon Dec 12 22:18:39 2016 +0900
+++ b/analyzer/fx/src/main/java/jp/co/ntt/oss/heapstats/utils/HeapStatsUtils.java	Mon Dec 12 22:29:55 2016 +0900
@@ -72,7 +72,7 @@
             String appJar = Stream.of(System.getProperty("java.class.path").split(System.getProperty("path.separator")))
                     .filter(s -> s.endsWith("heapstats-analyzer.jar"))
                     .findFirst()
-                    .get();
+                    .orElse(".");
             currentPath = Paths.get(appJar).toAbsolutePath().getParent();
         }
 
@@ -96,7 +96,7 @@
         }
 
         /* Load resource bundle */
-        resource = ResourceBundle.getBundle("HeapStatsResources", new Locale(prop.getProperty("language")));
+        resource = ResourceBundle.getBundle("HeapStatsResources");
 
         /* Validate values in properties. */
 
@@ -108,6 +108,9 @@
             throw new HeapStatsConfigException(resource.getString("invalid.option") + " language=" + language);
         }
 
+        /* Load resource bundle again */
+        resource = ResourceBundle.getBundle("HeapStatsResources", new Locale(prop.getProperty("language")));
+
         /* RankLevel */
         String rankLevelStr = prop.getProperty("ranklevel");
         if (rankLevelStr == null) {