Чтение внешних изображений

#java #javax.imageio

#java #javax.imageio

Вопрос:

Я осмотрелся и перепробовал много исправлений, но, похоже, не могу найти ни одного, который работает.

Я создаю простую игру frogger, и изначально все мои спрайты были загружены в каталог проекта, например img/spritename.png :

 image = ImageIO.read(getClass().getResourceAsStream("img/map.png"));
  

или

 ImageIO.read(getClass().getResource(sprite));
  

Все работало отлично и отлично, но я решил переместить все свои изображения во внешний каталог, чтобы создать для него установщик.

"C:Program FilesDIRimg" и все спрайты больше не загружаются.

Код, который, как я думал, исправит это, но не исправил

     BufferedImage image = null;

    File dir = new File(Config.imgDir   "map.png");
    try {
        image = ImageIO.read(dir);
    } catch (IOException e) {
        e.printStackTrace();
    }

    if (image == null) {
        return;
    }
}
  

Код конфигурации:

 public static String imgDir = "C:/Program Files/EmulousSoft/Frogger/img/";
  

У кого-нибудь есть какие-нибудь идеи? Я уверен, что это просто, но каждый раз, когда я пробую разные методы, я получаю "Value cannot be a null" "cannot find directory" или это.

Комментарии:

1. Я думаю, вам следует использовать path в Windows следующим образом C:\Program\Files\EmulousSoft

2. @hatefAlipoor Windows (и, как следствие, Java) поддерживает использование косой / черты в качестве разделителя путей, поэтому использование C:/Program Files/EmulousSoft/Frogger/img/ вполне допустимо.

3. Какую точную ошибку вы получаете? Пожалуйста, опубликуйте полную трассировку стека.

4. @DmitriyPopov на самом деле я не получаю никаких ошибок, просто изображения не загружаются, когда я запускаю извне, а не внутри каталога проекта.

5. Убедитесь, что строка пути соответствует тому, что вы думаете, что это может быть: System.out.println(Config.imgDir "map.png"); . Убедитесь, что он действительно существует: File dir = new File(Config.imgDir "map.png"); if (!dir.exists()) { System.err.println("Can not locate file!"); } . Посмотрите, разрешено ли вам читать его из операционной системы: File dir = new File(Config.imgDir "map.png"); if (dir.exists() amp;amp; !dir.canRead()) { System.err.println("You don't have permission to read file!"); } .