JavaFX从Jar中加载图像,该图像在自定义类加载器中加载

我正在构建一个可以通过插件扩展的应用程序(JavaFX 13)。我通过解析插件目录将jar加载到自定义URLClassLoader中。

URLClassLoader cl = FileSystemFinder.getInstance().getPluginClassLoader();

FXMLLoader loader = new FXMLLoader();
loader.setClassLoader(cl);
Pane foo = loader.load(fxml);

在插件内部,如果fxml文件尝试通过ImageView添加图像,则失败,原因是:java.lang.IllegalArgumentException: Invalid URL or resource not found

<graphic>
     <ImageView fitHeight="16.0" fitWidth="16.0" pickOnBounds="true" preserveRatio="true">
          <image>
               <Image url="@folder.png" />
          </image>
     </ImageView>
</graphic>

我也尝试从罐子里的FXMl控制器那样以编程方式执行此操作:

String imagePath = getclass().getclassLoader().getResource("foo.bar/plugin/folder.png").toExternalForm();
imageView.setImage(new Image(imagePath));

这里imagePath = jar:file:/Users/myUser/my-app/plugins/my-app-pluginName-1.0-snAPSHOT.jar!/foo.bar/plugin/jsf/folder.png

所以我的假设是,Image使用Application ClassLoader而不是我创建的Custom ClassLoader。

javafx.scene.image.Image行1107中,有:

 final ClassLoader contextClassLoader = Thread.currentThread().getcontextClassLoader();

所以对我而言,Image类不使用用于加载FXML文件的类加载器。

有人可以告诉我如何处理此案?通过FXML并以编程方式会很棒。

wyb001 回答:JavaFX从Jar中加载图像,该图像在自定义类加载器中加载

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2671298.html

大家都在问