Я пытаюсь сделать простое меню в JavaFX. При попытке загрузить изображение, используя относительный путь я получаю следующее исключение:Файл доступа Java за пределами пакета через относительный путь для загрузки как изображения (JavaFX)
Caused by: java.lang.IllegalArgumentException: Invalid URL or resource not found
at javafx.scene.image.Image.validateUrl(Image.java:1110)
Я использую затмение, хотя эта проблема кажется быть не затмить конкретно, так как я получил такое же исключение при работе в терминале. Кроме того, по какой-то причине он работает, когда файл находится внутри пакета или в папке src (данный путь изменяется соответствующим образом).
Мой текущий активный класс Menu.java
в пакете test.dsp
, который находится в проекте как:
проекта/SRC/тест/ЦОС/Menu.java
Файл Я попытке доступа:
проекта/активы/графика/тест/дсп/sslogo.png
Я пытаюсь получить доступ к файлу в предположении, что этот путь относительно текущего Menu
класса в Menu.java
и из-за физические каталоги будучи project/src/test/dsp/Menu.java
, я реализую ../
трижды в моем относительном пути, чтобы добраться до директории проекта. Затем я просто помещаю путь к изображению, как показано ниже.
Image ssLogo = new Image("../../../assets/graphics/test/dsp/sslogo.png",
2000, 2000, true, true);
I am basing my knowledge off of the constructor described in the JavaFX API:
public Image(java.lang.String url,
double requestedWidth,
double requestedHeight,
boolean preserveRatio,
boolean smooth)
URL - строка, представляющая URL для использования в выборке пиксельных данных
Я искал через множество вопросов, но ответы на них не обеспечить решение для того, чтобы мой нынешний случай работал. Я пробовал getResource, getResourceAsStream и внешний ресурс. Я проверил URL-адрес, который был возвращен этими средствами, и никто не работал с моим предоставленным путем, как показано выше. Я также пробовал разные номера ../
, но все равно безрезультатно. По общему признанию, я, возможно, реализовал их неправильно, что не привело к успеху.
Почему этот способ доступа к файлам через относительный путь не работает и как я могу сделать эту работу с моим текущим каталогом?
Каков правильный способ доступа к файлу через относительный путь в java вообще? И конкретно, когда файл находится вне пакета, например, этот случай?
- есть ли способ включить файл в путь к файлу с помощью кода в классе java?
Эффективно ли иметь файл внутри пакета, или это не имеет значения (явно в зависимости от способа доступа к файлу за пределами пакета)?
- Есть ли более эффективные средства доступа к файлам через java?
Я уже пробовал это без успеха. Любая причина, почему это не сработает? Возможно, мне не хватает чего-то невероятно простого, но я проверил это, и он не работает. Любые мысли, почему, были бы полезны. код ниже: Image ssLogo = новое изображение ("активы/графика/тест/дсп/sslogo.png", \t \t \t 2000, 2000, правда, правда); – prijatelj
Конечно, мой вопрос оказывается дубликатом. Интересно, почему я не нашел этот вопрос ...> _ <Использование: "file: assets/graphics/test/dsp/sslogo.png" работает и решил проблему. Но я до сих пор не понимаю и хотел бы получить некоторые пояснения/подтверждения: Итак, используя «файл:» в начале моей строки URL, путь будет относиться к корневому каталогу проекта, в данном случае «проект», Верный? Если строка URL не содержит файл: или http :, то он ищет в пакете «по умолчанию»? Даже если я не использую пакет по умолчанию? или вы имеете в виду пакет класса? – prijatelj
Когда вы используете протокол _file: _, путь является локальным для вашего компьютера, он может быть относительным или абсолютным (например: «файл: c: /users/Quentin/Desktop/myImage.png» или «файл: resources/images/myImage .png "). В случае относительного пути он будет относиться к корневому каталогу проекта. С протоколом _http: _ вы можете получить изображение в Интернете, но я думаю, что другие протоколы могут быть использованы. Если вы не используете протокол (например: «resources/images/myImage.png»), путь будет относиться к пакету по умолчанию. В вашем случае без протокола поиск изображения осуществляется по адресу «project/src/assets/graphics/test/dsp/sslogo.png» –