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

时间:2015-08-13 19:56:39

标签: java deployment javafx

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

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

当我获得已部署的.app时,我右键单击它并点击“显示包内容”我可以看到public void whenUserLogsIn(){ Query queryPK = CryptoCurrencyPUEntityManager.createNativeQuery("SELECT t.email, t.user_id FROM usertbl t"); Query queryFK = CryptoCurrencyPUEntityManager.createNativeQuery("SELECT t.curreny, t.amount FROM CURRENCY t WHERE user_fk=?"); List<Object[]> results = queryPK.getResultList(); for(int i = 0; i < results.size(); i++) { Object[] userArr = results.get(i); if(userArr[0].equals(loginEmail)) { int userID = (int)(userArr[1]); System.out.println(userID); queryFK.setParameter(1, userID); List<Object[]> currencyTBLresluts = queryFK.getResultList(); System.out.println("No of currency "+ currencyTBLresluts.size()); String[] currTBLheadings = {"Currency","Amount"}; DefaultTableModel model = new DefaultTableModel(currTBLheadings, currencyTBLresluts.size()); for (Object[] currencyTBLreslut : currencyTBLresluts) { model.addRow(currencyTBLreslut); System.out.println(currencyTBLreslut[0]); } jTableCurr.setModel(model); } } } 不仅没有这两个图标,还有许多神秘的实际上是在申请中显示。现在我解决了这个复制所有必需的图标,但我不能用.exe生成的文件,这不显示这2个正确的图标。

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

在此图片中,您可以更好地查看问题http://i.stack.imgur.com/8aVcz.png

  • 我在/Contents/Java/Resources/行503-506
  • 设置默认封面图片的代码
  • 我在播放队列列表中设置默认封面图像的代码 /com/musicott/view/RootLayoutController.java第98-101行
  • 我在其中设置滑块拇指图标的代码 /com/musicott/view/PlayQueueController.java行245-249

提前致谢。我将回答有关代码和项目的任何疑问。

1 个答案:

答案 0 :(得分:2)

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

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

问题在于,当您打包应用程序时,&#34;文件&#34;协议不再有效(请记住,您正在向Image构造函数发送URL)。您可以发送一个InputStream(您可以从当前的Class中获取一个),请参阅以下示例代码:

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

现在,如果你使用完全相同的代码,你需要确保(在构建jar之后)&#34; images&#34;文件夹最终在&#34; com / musicott / view /&#34;文件夹(因为RootLayoutController类在该包内),所以你必须添加两个额外的&#34; com&#34;和&#34; musicott&#34;当前&#34;资源中的文件夹&#34;文件夹和移动&#34;图像&#34;文件夹那里..你可能也需要在你的pom.xml文件中添加它(以确保你导出资源,因为我认为maven只会默认导出&#34;资源&#34;文件夹位于&#34 ; SRC /主/资源&#34):

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

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

保持良好的工作!