2014-08-29 89 views
0

我有一個由web開始運行的javafx應用程序。在我的fx應用程序中,我嘗試使用ClassLoader加載類,如下面的代碼所示。傳遞的參數是像「com.example.project.abcd」從另一個類加載類在同一個jar在java web啓動失敗

public final static List<Class<?>> find(final String scannedPackage) 
    { 
     final ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
     final String scannedPath = scannedPackage.replace(DOT, SLASH); 
     final Enumeration<URL> resources; 
     try { 
      resources = classLoader.getResources(scannedPath); 
     } catch (IOException e) { 
      throw new IllegalArgumentException(String.format(BAD_PACKAGE_ERROR, scannedPath, scannedPackage), e); 
     } 
     final List<Class<?>> classes = new LinkedList<Class<?>>(); 
     while (resources.hasMoreElements()) { 
      final File file = new File(resources.nextElement().getFile()); 
      classes.addAll(find(file, scannedPackage)); 
     } 
     return classes; 
    } 

現在我不能當我運行得到的所有類目前裏面的「com.example.project.abcd」包一包的名稱它通過java web開始,但通過IDE它工作正常。

我使用的是JDK 7,JavaFX的2

按照http://docs.oracle.com/javase/7/docs/technotes/guides/javaws/developersguide/faq.html#s211 Thread.currentThread()。getContextClassLoader()應該工作正常,但它不是!

試圖在網上搜索/谷歌搜索,但徒勞無功。檢查http://lopica.sourceforge.net/faq.html#customcl以及建議使用URLClassLoader嘗試。但是,這並沒有工作(雖然不知道應該傳遞給參數'網址')

任何幫助都是多少apreciated。

+0

嘗試從'resource.nextElement()'登錄URL。 – talex 2014-08-29 10:29:19

+0

如何做到這一點?當應用程序通過IDE運行時,我做到了。它給了我一個文件的URL。但在網絡啓動方面呢?如何通過web start啓動應用程序時進行調試?如果我使用sysout將它寫入JWS控制檯? – Sudheendra 2014-08-29 11:02:02

+0

我不知道JWS控制檯,但你可以登錄到文件。很多日誌庫如slf4j或log4j。 – talex 2014-08-29 11:30:49

回答

0

我認爲這在IDE中有效,因爲您的BIN/classes目錄用於獲取所有文件。 在Webstart模式,所有類都在JAR中。