【发布时间】:2013-10-23 17:29:54
【问题描述】:
我正在访问要在我的 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路径时找不到。
【问题讨论】:
-
你为什么需要它作为
File? -
..?用它做什么?
-
什么种类的东西?您已经可以通过
openStream()访问URL对象上的InputStream。它实际上不是jar中的文件。 -
嵌入资源不是文件,不能作为一个文件访问。相反,您需要使用 getResource 传回的 URL 引用或 getResourceAsInputStream 传回的 InputStream 引用。您拥有的引用只不过是您的 Jar 文件中指向 Zip 条目的指针...
-
哇,我从来不知道。我一直将它们视为“文件引用”或其他东西。我会重新考虑如何访问内容,干杯! PS:您应该发表回应,以便我可以接受并且其他人可以从我的错误中吸取教训吧?
标签: java macos javafx native app-bundle