在openjdk 11中获取资源


Classx.class.getResource("/com/sun/java/swing/plaf/windows/icons/ListView.gif");
Classx.class.getResource("/javax/swing/plaf/metal/icons/ocean/expanded.gif");

如何获取JDK 11上的资源,JDK 11正在处理JDK 8?

我已经尝试过getClass((,ClassLoader,但是我得到了null。

错误图像

在OpenJDK 11中,默认情况下不包括resources.jar库。因此,您必须手动添加resources jar文件。

如果检查java8lib目录,则会有一个包含所有这些图标的resources.jar文件。在OpenJDK 11中,它并不存在。比如从标准java11包中删除的XML绑定和其他库。

请添加外部库并使用您的代码获取资源。

您必须使用jrt文件系统来访问嵌入式资源:

FileSystem jrt = FileSystems.getFileSystem(URI.create("jrt:/"))
Path p1 = jrt.getPath("/modules/java.desktop/com/sun/java/swing/plaf/windows/icons/ListView.gif");
Path p2 = jrt.getPath("/modules/java.desktop/javax/swing/plaf/metal/icons/ocean/expanded.gif");

还要注意,该路径需要/modules/java.desktop在前面。

从那里,您可以使用Files类中的方法与路径进行交互。例如:

try (InputStream is = Files.newInputStream(p1)) {
// use is
}

最新更新