JavaFX资源处理:在WebView中加载HTML文件

时间:2016-05-21 06:20:16

标签: java javafx webview resources

我想在我的JavaFX应用程序的WebView中加载HTML文件。该文件位于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();
}

但它抛出一个例外说:

  

Application start方法中的异常   java.lang.reflect.InvocationTargetException

1 个答案:

答案 0 :(得分:14)

您收到此异常是因为此行上的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();

是等价的。

如需进一步阅读,您可以查看the documentation of getResource()