2015-12-07 32 views
0

,我得到以下錯誤:IKVM - getResourceAsStreams編譯與IKVM一個Java庫爲DLL後返回null

getResourceAsStream("path/to/resource.file") == null" 

庫嘗試加載從下面的代碼自己的JAR文件中的Java種源:

Thread.currentThread().getContextClassLoader().getResourceAsStream("path/to/resource.file") 

的解決方法我試過了種源文件複製到我的.NET項目的主目錄,並調用ikvmc與資源參數:

ikvmc java-library.jar -target:library -resouce:/path/to/resource.file=resource.file 

奇怪的是,所產生的DLL包括只包含一個空目錄strukture /path/to/resource.file其中resource.file不是文件resource.jar,但只是一個空目錄

是有辦法編譯Java庫與ikvmc到DLL中,Java代碼用ContextClassLoader.getResourceAsStream()讀取資源文件?

回答

0

這個問題是由類加載器的決定引起的。 Java庫使用上下文類加載器:

Thread.currentThread().getContextClassLoader() 

在IKVM中,似乎這是用於整個.NET運行時的通用類​​加載器。這一個不能從JAR文件加載資源。當將Java庫更改爲使用加載包含資源加載代碼的類的相同類加載器時,資源也會與IKVM一起正確加載:

ClassLoader currentClassLoader = MyClass.class.getClassLoader(); 
URL url = currentClassLoader.getResource("resource/name");