部署 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
- 我在第 503-506 行
/com/musicott/view/RootLayoutController.java
设置默认封面图像的代码
- 我在播放队列列表中设置默认封面图像的代码
/com/musicott/view/PlayQueueController.java
第 98-101 行
- 我在其中设置滑块缩略图图标的代码
/com/musicott/SceneManager.java
第 245-249 行
提前致谢。关于代码和项目的任何疑问,我都会回答。
好看的项目!因此,正如 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”(斜杠 在字符串的开头)以指示图像文件夹将位于根目录。
继续努力!
在我正在开发的 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
- 我在第 503-506 行
/com/musicott/view/RootLayoutController.java
设置默认封面图像的代码 - 我在播放队列列表中设置默认封面图像的代码
/com/musicott/view/PlayQueueController.java
第 98-101 行 - 我在其中设置滑块缩略图图标的代码
/com/musicott/SceneManager.java
第 245-249 行
提前致谢。关于代码和项目的任何疑问,我都会回答。
好看的项目!因此,正如 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”(斜杠 在字符串的开头)以指示图像文件夹将位于根目录。
继续努力!