IKVM - getResourceAsStreams returns 空
IKVM - getResourceAsStreams returns null
将带有 IKVM 的 Java 库编译成 DLL 后,出现以下错误:
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 包含一个 resource.jar 只包含一个空目录结构 /path/to/resource.file
其中 resource.file 不是文件,而只是另一个空目录
有没有办法用 ikvmc 将 Java 库编译成 DLL,其中 Java 代码用 ContextClassLoader.getResourceAsStream() 读取资源文件?
问题是由 class 加载程序的决定引起的。 Java 库使用上下文 class 加载程序:
Thread.currentThread().getContextClassLoader()
在 IKVM 中,这似乎是用于整个 .NET 运行时的通用 class 加载程序。这个无法从 JAR 文件加载资源。当更改 Java 库以使用加载包含资源加载代码的 class 的相同 class 加载器时,资源也会通过 IKVM 正确加载:
ClassLoader currentClassLoader = MyClass.class.getClassLoader();
URL url = currentClassLoader.getResource("resource/name");
将带有 IKVM 的 Java 库编译成 DLL 后,出现以下错误:
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 包含一个 resource.jar 只包含一个空目录结构 /path/to/resource.file
其中 resource.file 不是文件,而只是另一个空目录
有没有办法用 ikvmc 将 Java 库编译成 DLL,其中 Java 代码用 ContextClassLoader.getResourceAsStream() 读取资源文件?
问题是由 class 加载程序的决定引起的。 Java 库使用上下文 class 加载程序:
Thread.currentThread().getContextClassLoader()
在 IKVM 中,这似乎是用于整个 .NET 运行时的通用 class 加载程序。这个无法从 JAR 文件加载资源。当更改 Java 库以使用加载包含资源加载代码的 class 的相同 class 加载器时,资源也会通过 IKVM 正确加载:
ClassLoader currentClassLoader = MyClass.class.getClassLoader();
URL url = currentClassLoader.getResource("resource/name");