Файл JavaFX FXML загружается ровно за 1 секунду - PullRequest
0 голосов
/ 17 декабря 2018

Я создаю приложение в JavaFX и загружаю файлы FXML для макетов.В начале у меня были все мои файлы .fxml в моем пути к классам Java.

Поскольку я вроде как создаю игровой движок, я решил переместить все за пределы пути к классам, поэтому у меня теперь есть файловая система, котораявыглядит так:

Folder[javafx]
    editor.fxml
program.jar

Вот так я загружаю свой FXML

FXMLLoader.load(new URL("file:////" + System.getProperty("jdir") + "/javafx/" + name + ".fxml"));

Это может выглядеть не очень красиво, но работает (System.getProperty ("jdir")просто расположение .jar на диске).Java находит файл, но ВСЕГДА это занимает ТОЛЬКО одну секунду для каждого файла (размер файла FXML варьируется от 1 до 6 КБ)

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

Я надеюсь, что кто-то мог бы или помочь мне удалить эту задержку, или о том, как я могу загрузить FXML из .jar (Из моегоЗнаете, вы можете загружать ресурсы из jars только через потоки, но FXMLLoader не принимает потоки, поэтому я застрял.)

1 Ответ

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

Прежде всего, вы можете переместить System.getProperty ("jdir") наружу, потому что так вы будете вызывать его каждый раз, когда загружаете fxml.

Таким образом, вместо

FXMLLoader.load(new URL("file:////" + System.getProperty("jdir") + "/javafx/" + name + ".fxml"));

Сделайте что-то вроде:

 String jdirProp = System.getProperty("jdir"); 

И затем повторно используйте это значение для всех последующих вызовов.

FXMLLoader.load(new URL("file:////" + jdirProp + "/javafx/" + name + ".fxml"));

Но вопрос в том, почему бы вам не поместить свои файлы fxml в ресурсы и просто позвонить:

FXMLLoader.load(getClass().getResource("yourfile.fxml"));

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

...