создание объекта URL с относительным путем - PullRequest
4 голосов
/ 22 ноября 2010

Я создаю приложение Swing с JEditorPane, которое должно отображать HTML-файл с именем url1.html , хранящийся локально в папке page в корневой папке проекта.

Я создал следующий объект String

final String pagePath = "./page/";

и для отображения на панели JEditorPane я создал следующий объект URL:

URL url1 = new URL("file:///"+pagePath+"url1.html");

Однако, когда метод setPage вызывается с созданным объектом URL в качестве параметра

pagePane.setPage(url1);

выдает ошибку java.io.FileNotFoundException

Кажется, что-то не так с тем, как был создан url1 . Кто-нибудь знает решение этой проблемы?

Ответы [ 3 ]

13 голосов
/ 22 ноября 2010

Решение состоит в том, чтобы найти абсолютный путь к url1.html, сделать на нем объект java.io.File, а затем использовать комбинацию toURI().toURL():

URL url1 = (new java.io.File(absolutePathToHTMLFile)).toURI().toURL();

Предполагая, что текущий каталог является корнем page, вы можете передать относительный путь к File:

URL url1 = (new java.io.File("page/url1.html")).toURI().toURL();

или

URL url1 = (new java.io.File(new java.io.File("page"), "url1.html")).toURI().toURL();

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

Другое решение - поместить html-файл в качестве ресурса в jar-файл вашего приложения.

1 голос
/ 14 октября 2015

Чтобы загрузить ресурс из пути к классам (как упомянул хачик), вы можете сделать следующее:

URL url = getClass().getResource("page/url1.html");

или из статического контекста:

URL url = Thread.currentThread().getContextClassLoader().getResource("page/url1.html");

Так что в случае вышес использованием структуры Maven HTML-страница будет находиться в таком месте, как это:

C:/myProject/src/main/resources/page/url1.html
0 голосов
/ 22 ноября 2010

Я бы попробовал следующее

URL url = new URL("file", "", pagePath+"url1.html");

Я полагаю, что, объединяя всю строку, вы сталкиваетесь с проблемами Дайте мне знать, если это помогло

...