我正在做一个返回图像的宽度和高度的方法。
这是一个普通的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。我根本不明白为什么我必须两次调用它才能获得正确的结果。

最佳答案

getWidth的文档中:


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


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

09-25 20:39