2014-12-05 74 views
0

我已经搜索了一段时间,现在修复了这个问题。我的工作区中有一个项目文件夹(该文件夹基本上是我的根目录),并且其中有一个名为icon.gif的文件。在我的计划,我有以下几点:setIconImage只能在eclipse中运行,当作为可运行jar文件导出时不起作用

package com.mgflow58.Main; 

import javax.swing.ImageIcon; 
import javax.swing.JFrame; 

public class Game { 

    public static void main(String[] args) { 
     JFrame window = new JFrame("Guppy's Adventure"); 
     window.add(new GamePanel()); 
     window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     window.setResizable(false); 
     window.pack(); 
     window.setLocationRelativeTo(null); 
     window.setVisible(true); 
     window.setIconImage(new ImageIcon("icon.gif").getImage()); 
    } 

} 

,当我运行该图标可蚀罚款,但因为它在Eclipse一样,导出的jar文件不显示图标。任何想法为什么?试图弄清楚这件事我疯了。

+0

'的ImageIcon(字符串)'为t试图在当前工作目录(程序执行的地方)中寻找'icon.gif'。该文件位于Eclipse项目的上下文中的什么位置? – MadProgrammer 2014-12-05 00:39:53

+0

正如我所说的,icon.gif文件位于源文件夹之外的根文件夹中。只需坐在包含游戏所有内容的文件夹中 – octopus58 2014-12-05 00:42:56

+0

然后这些文件需要被复制到程序从 – MadProgrammer 2014-12-05 00:49:23

回答

1

该jar文件包含所需的正确文件夹中的所有图像文件。

有问题... ImageIcon(String)正在寻找磁盘上的命名 文件由JavaDocs描述...

public ImageIcon(String filename)

创建从 指定的文件一个ImageIcon。该图像将通过使用MediaTracker 预加载以监视图像的加载状态。指定的字符串可以是 文件名或文件路径。指定路径时,请使用Internet标准正斜杠(“/”)作为分隔符。 (该字符串是 转换为URL,因此正斜杠适用于所有系统)对于 例如,指定:

new ImageIcon("images/myImage.gif")

的描述被初始化为文件名的字符串。

参数:
文件名 - 一个String指定 文件名或路径

资源不再驻留在磁盘上,但没有被嵌入在JAR文件中,这样他们就可以不再访问使用基于File的方法。

相反,你需要使用类似Class#getResource,例如...

window.setIconImage(new ImageIcon(Game.class.getResource("icon.gif")).getImage()); 

话虽如此,我也建议使用ImageIO超过ImageIcon了许多的原因,但主要是因为它实际上将抛出一个异常,如果资源无法加载由于某种原因,而不是默默地失败...

看看Reading/Loading an Image更多细节

+0

这是行不通的,我从你的响应中复制的行不断得到以下异常:线程“main”java.lang中的异常。NullPointerException – octopus58 2014-12-05 12:57:58

+0

oracle选项也没有工作,它只是在eclipse中工作,但不是在实际的可运行jar文件中 – octopus58 2014-12-05 17:08:23

+0

您可能得到空指针异常的原因是因为图像不存在于该jar,你需要提供相对于src的路径... – MadProgrammer 2014-12-05 20:46:12

相关问题