我正在访问 Java 资源以在我的 JavaFX 应用程序中使用..
URL resource = getClass().getClassLoader().getResource("/image.jpg");
File file = new File(resource.getFile());
if (!file.exists()) {
throw new FileNotFoundException("No image: " + file)
}
一切正常,当作为 Java 应用程序运行时可以找到资源。
但是,现在我使用 zenjava 的 Maven 插件将我的 JavaFX 应用程序捆绑到原生 Mac 应用程序中:
<plugin>
<groupId>com.zenjava</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>2.0</version>
<configuration>
<mainClass>
com.seaniscool.foobar.FooBar
</mainClass>
</configuration>
</plugin>
我使用原生插件构建:
mvn clean jfx:native
现在,当我通过运行 Mac .app
文件来运行应用程序时,此资源无法再解析为文件。 getResource
返回此 URL:
jar:file:/Projects/foobar/target/foobar.app/Contents/Java/foobar-jfx.jar!/image.jpg
但当用作File
路径时却找不到。
最佳答案
URL
在
URL resource = getClass().getClassLoader().getResource("/image.jpg");
是一个统一资源定位器
。在本例中,它在 .jar
文件中找到由 /image.jp
标识的资源。事实证明,这是一种 zip
文件。
jar:file:/Projects/foobar/target/foobar.app/Contents/Java/foobar-jfx.jar!/image.jpg
zip 条目不是文件,它只是一堆对 zip 文件具有某种意义的字节。如果你想得到这些字节作为一个InputStream
,膨胀,你可以简单地调用
InputStream inputStream = resource.openStream();
关于java - 打包在 Mac 应用程序包中时无法访问 Java 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19389213/