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

标签 java deployment javafx

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

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

当我得到部署的.app时,我右键单击它并单击“显示包内容”,我可以看到不仅这两个图标没有打包在 /Contents/Java/Resources/,但许多其他内容实际上神秘地显示在应用程序中。现在我解决了这个问题,将所有需要的图标复制到那里,但我无法使用 .exe 生成的文件来执行此操作,该文件不显示这两个正确的图标。

我的应用程序是一个名为 Musicott 的音乐管理器/播放器,is on github这样你就可以看到那里的所有代码。这两个图标是用于可视化和在轨道中移动的 slider 拇指;以及没有封面图像的轨道的默认封面图像。

在这张图片中您可以更好地看到问题 /image/8aVcz.png

  • 我在 /com/musicott/view/RootLayoutController.java 第 503-506 行设置默认封面图像的代码
  • 我在播放队列列表中设置默认封面图像的代码 /com/musicott/view/PlayQueueController.java第 98-101 行
  • 我在其中设置 slider 拇指图标的代码 /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"协议(protocol)不再有效(请记住您正在向 Image 构造函数发送 URL)。您可以发送一个 InputStream(您可以从当前类中获取一个),请参阅以下示例代码:

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

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

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

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

继续努力!

关于java - 部署 JavaFX 应用程序的隐藏资源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31997295/

相关文章:

c# - 桌面共享和聊天开源

java - 无论如何要找出当前正在使用该对象的线程数?

java - 我无法在 SQLite 中按 id 删除某些行

deployment - 使用 Powershell 部署到 SQL Azure - 有没有办法生成数据丢失警告报告?

java - 位图 - Base64 字符串 - 位图转换 android

ruby-on-rails - 生产环境变量

Django-page-cms部署插入错误

javafx - 如何在初始化期间从 Controller 获取阶段?

JavaFX 调用目标异常

JavaFX:CSS 文件中的未知属性