java - 打包在 Mac 应用程序包中时无法访问 Java 资源

标签 java macos javafx native app-bundle

我正在访问 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();

See the javadoc of URL#openStream().

关于java - 打包在 Mac 应用程序包中时无法访问 Java 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19389213/

相关文章:

java - 灵活的倒计时?

java - 将 JavaCV 与 NetBeans 一起使用

c# - OS X 上的单声道和 WInforms

java - 有条件的颜色背景 JavaFX 折线图

java - Sevlet3 登录方法如何工作?

java - Apache POI : Get value from textbox

macos - 类似于 acme 的现代文本编辑器

objective-c - 为什么我觉得 Interface Builder 挡住了我的路?

JavaFX 2.2 与 native bundle (exe)的问题

java - 如何在Java中将图像转换为形状?