2015-12-07 9 views
0

после компиляции библиотеки Java с IKVM в DLL, я получаю следующее сообщение об ошибке:IKVM - getResourceAsStreams возвращает нулевое

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

библиотека пытается загрузить Resouce Java из собственного JAR-файла со следующим кодом:

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

в качестве обходного Я попытался скопировать файл Resouce в основной каталог моего .NET проекта и вызвать ikvmc с параметром ресурса:

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

странное дело в том, что в результате DLL содержит resource.jar, содержащий только пустой каталог strukture /path/to/resource.file где resource.file это не файл, а просто другой пустой каталог

есть способ для компиляции 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");