2011-05-28 49 views
0

我正在做一个方法,返回图像的宽度高度。 这是一个普通的32x32图标。下面是我做的,到目前为止:阅读图像宽度和高度非常奇怪的问题(爪哇)

Image icon; 
    String filename = "G:\\icon.jpg"; 

    int iconWidth = 0; 
    int iconHeight = 0; 

    icon = Toolkit.getDefaultToolkit().getImage(filename); 
    iconWidth = icon.getWidth(null); 
    iconHeight = icon.getHeight(null); 
    System.out.println(iconWidth); 

    JFrame window = new JFrame(); 

    icon = Toolkit.getDefaultToolkit().getImage(filename); 
    iconWidth = icon.getWidth(null); 
    iconHeight = icon.getHeight(null); 
    System.out.println(iconWidth); 

代码输出

-1 
    32 

32是图像的正确宽度。但为什么它首先返回-1?代码完全一样。删除“JFrame”行会返回两个-1。 JFrame会影响默认的工具包吗?

我也试过这个代码:

 JFrame window = new JFrame(); 
     icon = Toolkit.getDefaultToolkit().getImage(filename); 
     iconWidth = icon.getWidth(null); 
     iconHeight = icon.getHeight(null); 
     System.out.println(iconWidth); 

它也返回-1。我简直不明白为什么我必须调用它两次才能得到正确的结果。

回答

4

从文档为getWidth

确定图像的宽度。如果宽度尚未知道,则此方法返回-1,稍后通知指定的对象ImageObserver

所以也许图像仍然是异步加载。尝试使用ImageObserver,以便在信息可用时通知您。

+0

您可以举一个如何在这种情况下使用MediaTracker或ImageObserver的例子吗?我永远不能初始化MediaTracker,因为我总是得到“构造函数MediaTracker(MainApp)未定义”。使用imageObserver,我卡住了imageUpdate()方法。 – David 2011-05-28 09:27:05

+0

@David:你在“imageUpdate”方法上“卡住”是什么意思?你基本上需要实现ImageObserver来完成你知道图像信息时所需的任何操作。 – 2011-05-28 09:28:07

+0

“卡住”的含义在阅读了很多例子之后(比如http://www.java2s.com/Code/JavaAPI/java.awt.image/ImageObserverALLBITS.htm),我仍然无法理解如何去做,主要是因为我对界面不太熟悉。我也不完全明白发生了什么。感谢您的帮助。 – David 2011-05-28 09:32:45