новый экземпляр Image с использованием (getClass (). getResourceAsStream ("Path / to / pic")) vs ("Path / to / pic") - PullRequest
0 голосов
/ 09 декабря 2018

когда я следовал учебнику по javafx и пытался создать новый экземпляр Image для ImageView, чтобы использовать его для TreeView, я заметил, что этот репетитор использовал для создания ImageView: new ImageView(new Image(getClass().getResourceAsStream("/Path/to/pic"))

вместоиз:

new ImageView(new Image("/Path/to/pic"))

Я пробовал оба, и они хорошо работают для обоих, я хочу знать, имеет ли это вращение с использованием getClass().getResourceAsStream() какое-либо влияние или значение.

1 Ответ

0 голосов
/ 10 декабря 2018

Да.На самом деле это очень важно.

Изображение является ресурсом .Ресурс - это некоторая неизменная информация, которая используется программой, например изображения, звуки, свойства по умолчанию, шаблоны, исходные данные и т. Д.

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

Но когда вы хотите развернуть свою программу (упакуйте ее и установите в другом месте, например,сервер или чей-либо компьютер), обычно он упакован в один или несколько файлов JAR.Файлы JAR включают скомпилированные классы и ресурсы.

Когда они находятся внутри файла JAR, ресурсы больше не являются файлами.Это просто zip-записи (zip-записи не являются файлами - они являются частью zip-файла, доступ к которому можно получить с помощью соответствующего программного обеспечения).

Если вы использовали файловые операции для доступа к ресурсу, вы столкнетесь спроблема, как эта .Изображение не будет отображаться - потому что файла там нет.Ресурс не является файлом, он не существует как файл на диске.Это просто группа байтов в вашем JAR-файле.

Чтобы получить доступ к ресурсу, вы используете объект класса и getResourceAsStream(), как вам было показано.Это «магически» знает (когда загрузчик классов и путь к классам настроены правильно), что при запуске внутри среды IDE ресурс сохраняется в файле в рабочей области, а при запуске из JAR ресурс сохраняется внутриJAR.Он получит эти байты от того места, где они хранятся, и вы сможете создать свое изображение.

...