部署 JavaFX 应用程序的隐藏资源文件

Hidden resource files deploying a JavaFX application

在我正在开发的 JavaFX 应用程序中,我使用了几个图标来设置一些按钮和视图对象的样式。我使用的第一个图标已成功显示并打包到部署文件(.dmg 与 .app 和 .exe),因为我必须告诉 Ant 将资源文件夹包含在图标中。

当我用Eclipse 运行项目时,所有的图标和图像都显示正确,但是当我部署项目时,只有两个(最后两个包含在上次改进中)没有显示.为什么会这样,因为我没有更改任何文件夹或配置?

当我得到部署的 .app 时,我右键单击它并单击 "show package contents" 我可以看到不仅这两个图标没有打包在 /Contents/Java/Resources/ 中,但许多其他图标神秘地实际上显示在应用程序中。现在我解决了这个复制所有需要的图标的问题,但是我不能用 .exe 生成的文件做到这一点,它没有显示这 2 个正确的图标。

我的应用程序是一个名为 Musicott 的音乐 organizer/player,is on github 因此您可以在那里看到所有代码。这两个图标是用于可视化和在轨道中移动的滑块拇指;以及没有曲目的默认封面图片。

在这张图片中你可以更清楚地看到问题http://i.stack.imgur.com/8aVcz.png

提前致谢。关于代码和项目的任何疑问,我都会回答。

好看的项目!因此,正如 James_D 指出的那样,您目前正在使用以下代码加载图标:

new Image("file:resources/images/default-cover-icon.png")
new Image("file:resources/images/default-cover-icon.png", 45, 45, true, true));

问题是,当您打包应用程序时,"file" 协议不再有效(请记住您正在向图像构造函数发送 URL)。您可以改为发送一个 InputStream(您可以从当前 Class 中获取一个),请参阅此示例代码:

new Image(RootLayoutController.class.getResourceAsStream("images/default-cover-icon.png"));

现在,如果您使用完全相同的代码,您将需要确保(在构建 jar 之后)"images" 文件夹最终位于 "com/musicott/view/" 文件夹中(因为 RootLayoutController class 在该包内),因此您必须在当前 "resources" 文件夹中添加两个额外的 "com" 和 "musicott" 文件夹,并将 "images" 文件夹移到那里..您可能还需要将其添加到 pom.xml 文件中(以确保导出资源,因为我认为 Maven 默认只会导出位于 "src/main/resources" 的 "resources" 文件夹) :

        <resource>
            <directory>resources</directory>
        </resource>

注意,如果您想保留当前的文件夹结构(无需在 "resources" 文件夹中创建 "com/musicott/view" 文件夹),您可以更改路径在 getResourceAsStream() 调用中调用“/images/default-cover-icon.png”(斜杠 在字符串的开头)以指示图像文件夹将位于根目录。

继续努力!