getResource, ширина изображения возвращает -1 - PullRequest
0 голосов
/ 08 января 2012

У меня есть следующий фрагмент, который загружает изображения:

    String imgName = "/assets/" + name;
    URL imgURL = Groovy.class.getResource(imgName);
            System.out.println(imgURL.getPath());
    Toolkit tk = Toolkit.getDefaultToolkit();
    Image image = tk.getImage(imgURL);
    return image;

И где изображение нарисовано:

        Graphics2D g = (Graphics2D) strategy.getDrawGraphics();
        g.setColor(Color.black);
        g.fillRect(0,0,screenWidth,screenHeight);
        g.drawImage(background, 0, 0, null);
        System.out.println(background.getWidth(null));
        if (background.getWidth(null) < 0)
            System.exit(1);

Однако imgURL всегда возвращает ноль. Я использую Eclipse (и только что, blegh) и запускаю классы с опцией run или debug. Если я изменяю путь, это дает исключение для файла, не найденного.

Структура файла выглядит следующим образом:

Project -> src and assets -> src имеет Groovy, у активов есть изображение -> Groovy имеет Groovy.class

Редактировать: я переключился обратно на Netbeans. Теперь imgURL загружается нормально, и getPath возвращает правильный путь. Однако ширина / высота изображения возвращают -1. Это актуальная проблема сейчас.

Редактировать: -1 означает, что ширина еще не известна, однако при отображении изображения отображается белый экран.

Ответы [ 2 ]

1 голос
/ 08 января 2012

Javadoc на помощь:

Перед делегированием абсолютное имя ресурса строится из данное имя ресурса с использованием этого алгоритма:

Если имя начинается с '/' ('\ u002f'), тогда абсолютное имя ресурса - это часть имени, следующая за '/'. В противном случае абсолютное имя имеет следующую форму:

       modified_package_name/name

Где имя_моделированного_пакета - это имя пакета этого объекта с заменой '/' на '.' ( '\ U002e').

Короче говоря: относительные пути не могут использовать .. для повышения уровня. Используйте абсолютное имя (начиная с /, из корня пути к классам).

Более того, getResource загружает ресурсы из пути к классам. Если изображение не в пути к классам, оно не будет работать. Ваше файловое дерево совсем не ясно, но кажется, что вы не поняли, что такое classpath. Если вы хотите загрузить файл из файловой системы, используйте File IO, а не ресурсы.

0 голосов
/ 08 января 2012

Проблема заключалась в использовании инструментария для получения изображения, возможно, потому что я использую OpenJDK? В любом случае, использование ImageIO.read (imgURL) исправило это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...