Embedded resource IKVM-getResourceAsStreams返回null
在将带有IKVM的Java库编译为DLL后,出现以下错误:Embedded resource IKVM-getResourceAsStreams返回null,embedded-resource,ikvm,Embedded Resource,Ikvm,在将带有IKVM的Java库编译为DLL后,出现以下错误: getResourceAsStream("path/to/resource.file") == null" 库尝试使用以下代码从自己的jar文件加载Java资源: Thread.currentThread().getContextClassLoader().getResourceAsStream("path/to/resource.file") 作为解决方法,我尝试将resource文件复制到.NET项目的主目录中,并使用resou
getResourceAsStream("path/to/resource.file") == null"
库尝试使用以下代码从自己的jar文件加载Java资源:
Thread.currentThread().getContextClassLoader().getResourceAsStream("path/to/resource.file")
作为解决方法,我尝试将resource文件复制到.NET项目的主目录中,并使用resource参数调用ikvmc:
ikvmc java-library.jar -target:library -resouce:/path/to/resource.file=resource.file
奇怪的是,生成的DLL包含一个resource.jar,其中只包含一个空目录结构/path/to/resource.file
,其中resource.file不是文件,而是另一个空目录
是否有一种方法可以将带有ikvmc的Java库编译成DLL,其中Java代码使用ContextClassLoader.getResourceAsStream()读取资源文件?问题是由类加载器上的决策引起的。Java库使用上下文类加载器:
Thread.currentThread().getContextClassLoader()
在IKVM中,这似乎是用于整个.NET运行时的通用类装入器。这个无法从JAR文件加载资源。将Java库更改为使用加载包含资源加载代码的类的同一类加载器时,也会使用IKVM正确加载资源:
ClassLoader currentClassLoader = MyClass.class.getClassLoader();
URL url = currentClassLoader.getResource("resource/name");