Под go ... Вы имеете в виду иконку в верхнем углу вашего окна? Я буду использовать пример этого внутри исполняемого фляги. Тем не менее, концепция похожа на чтение любого ресурса, который вы хотите упаковать внутри вашего jar-файла.
Здесь есть два ключевых понятия, которые отличаются от простого чтения обычных файлов, когда вы не запускаете изнутри jar-файла. Вещи работают по-другому.
java.awt.Image frameImage = new javax.swing.ImageIcon(
getClass().getResource("/LotsaIcon.jpg")
).getImage();
Обратите внимание, что вместо указания путей к файлам мы загружаем этот ресурс в виде потока (если он находится внутри файла jar.)
Здесь требуются относительные пути, относительно расположения вашего файла в банке относительно root, из которого выполняется java 'main'. Это означает, что для файла, находящегося в том же каталоге, из которого выполняется java, требуется имя sla sh перед именем файла. Очень важно. Вне банки вам это не понадобится. Внутри банки должен быть этот предшествующий пункт sh ... чтобы сказать здесь, в этом относительном каталоге. Относительный путь, а не абсолютный ... относительно того, где код java запускается изнутри банки.
Третье: ... Вы используете maven? Если это так, чтобы получить ваш ресурс в jar при сборке проекта, вам нужно сообщить maven об этом в вашем файле POM.
<resources>
<resource>
<directory>src/my-resources</directory>
<includes>
<include>**/*.txt</include>
<include>**/*.jpg</include>
</includes>
</resource>
</resources>
</build>
... где-то до этого последнего / build в вашем POM.
В противном случае ... он даже не попадет go в вашу банку. Затем поместите ресурс в папку, которую вы видите в этой директиве POM. Он есть в вашем проекте src / my-resources
Maven перемещает его, делает что-то и помещает его в ваш jar для вас в каталог root, когда он делает исполняемый jar ... в root уровень. Вот почему относительный путь / в моем файле. Если бы я поместил его в кучу папок в этом каталоге src / my-resources ... мне пришлось бы предшествовать моему имени файла с этим относительным путем, чтобы программа знала, где в src / my-resources искать ... глубже.
Я просто использую root, хотя.
Я надеюсь, что это поможет вам. Иногда, для некоторых вещей, getResource не обрезает его, и вам нужно переключиться на использование getResourceAsStream. Зависит от того, что вы делаете.
Надеюсь, это даст вам возможность начать. Jar - это другая среда, отличная от того, что находится на диске и смотрит на абсолютные пути к местам. В этом есть методология. Вы больше не смотрите на файловую систему; вы ищите в банке его, нет файловой системы или C :. Ты в аквариуме. Вы также должны найти свой ресурс в аквариуме, а не в файловой системе. И вы должны быть уверены, что ваш файл будет помещен в аквариум с вами, когда вы создаете свой проект ... или его вообще не найти. И не забывайте тот относительный путь в вашем коде ... предыдущий пункт sh, который вам не понадобится в обычной файловой системе.
Удачи!