2011-09-25 74 views
1

显示我有这样的代码:ImageIcon的犯规上左上角的应用程序窗口

public DesktopApplication1View(SingleFrameApplication app) 
    { 
     super(app); 
     pbu.registriere(this); 

     ImageIcon icon = new ImageIcon("resources/BilKa_Icon_32.png"); 
     this.getFrame().setIconImage(icon.getImage()); 

     initComponents(); 

我想知道为什么图像图标犯规出现在应用程序窗口的左上角。它仍然是Java杯咖啡标志。

有什么不对吗?

谢谢

+1

is icon.getImageLoadStatus()== MediaTracker.COMPLETE –

+0

我该如何检查? – hectichavana

+0

你的问题可能是重复的:http://stackoverflow.com/questions/7194734/setting-application-icon-in-swing –

回答

2

一个可能的可能性是您的资源路径可能不正确。根据您的文件层次结构以及您的类文件是否在jar中等,您可能需要在res之前的路径开始处使用“/”,以使路径变为绝对路径而不是相对路径。教程:http://download.oracle.com/javase/1.5.0/docs/guide/lang/resources.html

如果您确信自己正在正确读取图像(一个好的测试是在窗口内制作一个虚拟组件,并查看是否可以将图像加载到该窗口中),则应查看以下内容Frame/Top Level Window Tutorial,特别是关于窗饰的部分。特别是,你可能没有做的一件事(我无法从你的片段中看出来)是,看起来你可能需要在框架创建之前设置JFrame.setDefaultLookAndFeelDecorated(true); ......你无法使用this.getFrame()来做,但是需要在初始化代码中的某处执行。

+0

一切似乎都正确,包括资源路径,因为在另一个盒子上,我在同一文件夹(资源)上设置图像,并使用相同的文字 – hectichavana

+0

您是否在区分大小写的操作系统上?我注意到你的图像文件名中有大写字母。 –

+0

JFrame frame = new JFrame(“FrameDemo”); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JLabel emptyLabel = new JLabel(“”); emptyLabel.setPreferredSize(new Dimension(175,100)); frame.getContentPane()。add(emptyLabel,BorderLayout。中央); frame.setIconImage(new ImageIcon(“/ resources/BilKa_Icon_32.png”)。getImage()); 我把这些放在课堂上,但是新窗口弹出来了,但新窗口的图标也没有改变。 – hectichavana

2

Mike K是对的,ImageIcons可以动态加载,并且图像在第一次初始化时可以具有零大小。另请注意,在Unix和JAR中,名称区分大小写。

试试这个:

try{ 
    ImageIcon icon = new ImageIcon("resources/BilKa_Icon_32.png"); 
    MediaTracker mt=new MediaTracker(this); 
    mt.addImage(icon.getImage(),0); 
    mt.waitForAll(); 
    this.getFrame().setIconImage(icon.getImage()); 
}catch(InterruptedException excp){} 

-

OK道歉我已经编辑了addImage - 它需要它可以是任何数量的额外参数ID。 至于你的错误“没有这样的构造函数”,它告诉你,你需要传递一个Component给构造函数。你的应用程序窗口是一个组件,所以你应该把它作为参数传递给它。我使用了this,因为大多数人将此代码放在class内部,该代码扩展为Frame,WindowJFrame。所以使用

MediaTracker mt=new MediaTracker(this.getFrame()); 
+0

我得到这个错误:构造函数MediaTracker(DesktopApplication1View)是未定义的。我还需要一个mt.addImage的参数 – hectichavana