В основном проблема заключается в том, что для работы с относительными ссылками в html вам нужен полный URL-адрес, включая схему и т. Д. URL-адрес, относящийся к текущему классу или рабочему каталогу, не будет работать.
Предполагая, что html-файл и связанное с ним изображение связаны с приложением (т. Е. Когда вы создаете файл jar для приложения, html-файл и изображение будут частью файла jar), вы можете получить URL-адрес для html-файл с
getClass().getClassLoader().getResource("path/to/file.html");
где путь относительно пути к классам. Затем вы можете использовать toExternalForm()
для преобразования в String
в соответствующем формате. Это подходит для HTML страницы справки и т.д.
Вот пример:
HTMLTest.java:
package htmltest;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
public class HTMLTest extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
WebView webView = new WebView();
webView.getEngine().load(getClass().getClassLoader().getResource("htmltest/html/test.html").toExternalForm());
Scene scene = new Scene(webView, 600, 600);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
test.html:
<html>
<head><title>Test</title></head>
<body>
<h1>Test page</h1>
<img src="img/testImage.png"/>
</body>
</html>
testImage.PNG: раскладка
Проект:
htmltest
- HTMLTest.class
- html
- test.html
- img
- testImage.png
Скриншот:
С другой стороны, если вы действительно загрузив файл HTML из файловой системы, вы может создать объект File
для файла HTML, а затем преобразовать его в URI. Это было бы уместно, например, если бы вы писали HTML-редактор, в котором пользователь редактировал файл HTML и сохранял его в файловой системе, и вы хотели отобразить результат в веб-представлении; или, если вы попросите пользователя загрузить файл HTML с FileChooser
.
Код для этого будет выглядеть так:
File htmlFile = new File(...); // or get from filechooser...
webEngine.load(htmlFile.toURI().toString());
Можете ли вы разместить «HTML»? –
Я не думаю, что проблема в html-файле, но в любом случае я обновил его. – loryruta
Нет, но это дает мне кое-что испытать. –