Как использовать изображение в проекте Java без абсолютного пути

1

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

Итак, в настоящее время я использую метод getImage из класса ImageIcon, например:

Image body = new ImageIcon("C:/Users/Centollo/Documents/NetBeansProjects/Chess/build/classes/chess/img/WhiteBishop.png").getImage();

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

Все, что мне нужно знать, - это где разместить изображения и как будет выглядеть код для доступа к ним. Попытайтесь объяснить это, как будто я глуп, пожалуйста. Я читал ответы на подобные вопросы, но я не могу сделать из них головы или хвосты.

Я работаю в NetBeans с пакетом "шахматы" со всеми пакетами.java и chess.img со всеми.png.

Теги:
netbeans
image
jar

3 ответа

0
Лучший ответ

Очень быстрый поиск в Google дает следующее:

URL resource = getClass().getClassLoader().getResource( "img/WhiteBishop.png" );
Image body = new ImageIcon( resource );
  • 0
    Примечание: путь должен быть "chess / img / WhiteBishop.png", поскольку это полный пакет.
  • 0
    Это работает, но по какой-то причине папка img должна находиться внутри папки src (с файлами .java) И внутри папки build / classes (с .class) в проекте. В противном случае я получаю исключение NullPointerException во второй строке этого кода. (Я добавил метод getImage ()). Это должно работать так?
Показать ещё 3 комментария
1

Если ваш класс простирается от JFrame, вы можете сделать это:

Image image = new ImageIcon(this.getClass().getResource("/images/MyImage.jpg")).getImage();

Если ваш класс расширяет апплет, вы можете пойти следующим образом:

private URL base = null;
private Image myImage = null;

try
{
    base = getDocumentBase();
} catch (Exception e)
{
    e.printStackTrace();
}

myImage = getImage(base, "images/MyImage.jpg");
0

Есть несколько способов сделать это, но здесь, как я бы предложил:

Убедитесь, что папка chess.img находится в вашем пути к chess.img приложений. Затем попробуйте обратиться к пути как chess.img/image (да, вы можете использовать косую черту в окнах).

Если это не работает, используйте:

ChessClass.class.getClassLoader().loadResourceAsStream("/chess.img/image");

Обратите внимание на косую черту в начале ссылки на файл. Это указывает на корень пути к классам. Это немного запутанно, поскольку кто-то с опытом unix/linux может подумать, что это относится к корню файловой системы. Это имеет тенденцию работать лучше, чем другой ответ по причинам, которые я знал 10 лет назад. Это уродливый бит Java, который никогда не был полностью очищен.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню