我想在我的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
答案 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()
。