Очень странная проблема с чтением изображения шириной и высотой (Java) - PullRequest
0 голосов
/ 28 мая 2011

Я делаю метод, который возвращает ширина и высота изображения. Это обычный значок 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. Я просто не могу понять, почему мне нужно дважды позвонить, чтобы получить правильный результат.

1 Ответ

4 голосов
/ 28 мая 2011

Из документов на getWidth:

Определяет ширину изображения. Если ширина еще не известна, этот метод возвращает -1 и указанный объект ImageObserver уведомляется позже.

Так что, возможно, изображение все еще загружается асинхронно. Попробуйте использовать ImageObserver, чтобы получать уведомления, когда информация станет доступной.

...