【问题标题】:IKVM - getResourceAsStreams returns nullIKVM - getResourceAsStreams 返回 null
【发布时间】:2015-12-07 15:04:16
【问题描述】:

使用 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() 读取资源文件?

【问题讨论】:

    标签: embedded-resource ikvm


    【解决方案1】:

    问题是由类加载器上的决定引起的。 Java 库使用上下文类加载器:

    Thread.currentThread().getContextClassLoader()
    

    在 IKVM 中,这似乎是用于整个 .NET 运行时的通用类​​加载器。这个不能从 JAR 文件中加载资源。当更改 Java 库以使用加载包含资源加载代码的类的相同类加载器时,资源也会正确地使用 IKVM 加载:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-21
      • 2020-06-19
      • 2011-10-15
      • 2014-06-28
      相关资源
      最近更新 更多