Обработка ресурсов JavaFX: загрузка файлов HTML в WebView

Я хочу загрузить HTML-файл в WebView моего приложения JavaFX. Файл находится в моей директории проекта, внутри webviewsample пакет.

Я использовал следующий код:

public void start(Stage primaryStage) throws Exception {
    primaryStage.setTitle("WebView test");             

    WebView  browser = new WebView();
    WebEngine engine = browser.getEngine();
    String url = WebViewSample.class.getResource("/map.html").toExternalForm();
    engine.load(url);

    StackPane sp = new StackPane();
    sp.getChildren().add(browser);

    Scene root = new Scene(sp);

    primaryStage.setScene(root);
    primaryStage.show();
}

Но это исключение говорит:

Исключение в методе запуска приложения java.lang.reflect.InvocationTargetException

1 ответ

Решение

Вы получаете это исключение, потому что ваш url переменная равна нулю в этой строке:

String url = WebViewSample.class.getResource("/map.html").toExternalForm();

У вас есть несколько вариантов с getResource():

Если ресурс находится в том же каталоге, что и класс, то вы можете использовать

String url = WebViewSample.class.getResource("map.html").toExternalForm();

Использование начала косой черты ("/") означает относительный путь к корню проекта.:

В вашем конкретном случае, если ресурс хранится в webviewsample пакет, вы можете получить ресурс как:

String url = WebViewSample.class.getResource("/webviewsample/map.html").toExternalForm();

Использование начинающейся точки с косой чертой ("./") означает относительный путь к пути класса:

Представьте, что ваш rclass хранится в упаковке webviewsampleи ваш ресурс (map.html) хранится в подкаталоге res, Вы можете использовать эту команду для получения URL:

String url = WebViewSample.class.getResource("./res/map.html").toExternalForm();

Исходя из этого, если ваш ресурс находится в одном каталоге с вашим классом, то:

String url = WebViewSample.class.getResource("map.html").toExternalForm();

а также

String url = WebViewSample.class.getResource("./map.html").toExternalForm();

эквивалентны.

Для дальнейшего чтения вы можете проверить документациюgetResource(),

Другие вопросы по тегам