我正在访问要在我的JavaFX应用程序中使用的Java资源..
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
返回此网址:
jar:file:/Projects/foobar/target/foobar.app/Contents/Java/foobar-jfx.jar!/image.jpg
但是当用作File
路径时无法找到它。
答案 0 :(得分:1)
中的
URL
URL resource = getClass().getClassLoader().getResource("/image.jpg");
是uniform resource locator
。在这种情况下,它会在/image.jp
文件中找到由.jar
标识的资源。事实证明,这是一种zip
文件。
jar:file:/Projects/foobar/target/foobar.app/Contents/Java/foobar-jfx.jar!/image.jpg
zip条目不是文件,它只是一堆对zip文件有一定意义的字节。如果你希望将这些字节作为InputStream
充气,你可以简单地调用
InputStream inputStream = resource.openStream();
答案 1 :(得分:0)
您必须使用完全限定名称:/package1/package2/.../file-name
而不是/file-name
直接