Java 除非程序从终端运行,否则不会显示JFrame框架图标

Java 除非程序从终端运行,否则不会显示JFrame框架图标,java,swing,Java,Swing,我终于完成了我的第一个真正的计划,并一直试图把一些收尾工作。其中一项收尾工作就是用图标和其他东西来包装它。问题是,该图标仅在我从终端运行jar时显示。例如,当我双击罐子运行它时,我只看到杜克的吉祥物。我激活了同一个jar文件,但方式不同,结果也不同 示例1(终端)。 请注意图标是如何显示在我的托盘中的 示例2(双击)。 请注意,图标如何不显示在我的托盘中 有人知道如何解决这个问题吗?甚至知道问题是什么 非常感谢 编辑1:代码 URL iconURL = getClass().getResourc

我终于完成了我的第一个真正的计划,并一直试图把一些收尾工作。其中一项收尾工作就是用图标和其他东西来包装它。问题是,该图标仅在我从终端运行jar时显示。例如,当我双击罐子运行它时,我只看到杜克的吉祥物。我激活了同一个jar文件,但方式不同,结果也不同

示例1(终端)。 请注意图标是如何显示在我的托盘中的

示例2(双击)。 请注意,图标如何不显示在我的托盘中

有人知道如何解决这个问题吗?甚至知道问题是什么

非常感谢

编辑1:代码

URL iconURL = getClass().getResource("notebook_builder_icon.gif");
ImageIcon icon = new ImageIcon(iconURL);
frame.setIconImage(icon.getImage());

终端
双击
之间的主要区别在于执行位置的上下文。从
终端运行时,执行上下文将是执行java命令的目录。双击Jar时,上下文将取决于系统。您可以使用
System.out.println(新文件(“.”.getCanonicalPath())
以输出路径


在您的
终端
中,您的上下文是
~/Programming/java
,而
双击
会使上下文成为
.jar
文件的当前文件夹。

很抱歉,如果将我的托盘、标题栏、程序、终端、,我实际上是通过创建一个URL对象来实现的,比如“URL iconURL=getClass().getResource(“notebook_builder_icon.gif”);”。然后我将其传递给ImageIcon类。最后,我调用frame.setIconImage(icon.getImage)。你能显示你正在使用的代码吗?如果不看你用来加载图像的代码,很难判断。虽然请看一下如何,这可能对主题有所帮助:-)我在编辑中添加了代码,但我将查看该链接!所以要解决这个问题,我是否应该找到一种方法将上下文设置为与终端中的相同?您是否测试了这两条路径?我想我找到了解决方案!如果我传递getResource()新文件(“logo.gif”).getAbsolutePath()而不仅仅是字符串呢?伙计,这两个窗口之间有区别吗?我想他们都没有偶像。我认为运行
jar
双击
java-jar
是错误的,因为显然它们在您的案例中都有相同的上下文,我认为。@roror屏幕截图左侧的应用程序驳接中的图标不同。