在我正在开发的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 提前致谢。我将回答有关代码和项目的任何疑问。
答案 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文件夹位于根目录。
保持良好的工作!