尝试将本地页面加载到 JavaFX webEngine

Posted

技术标签:

【中文标题】尝试将本地页面加载到 JavaFX webEngine【英文标题】:Trying to load a local page into JavaFX webEngine 【发布时间】:2016-06-12 17:56:56 【问题描述】:

我的 JavaFX 应用程序的选项卡上有一个 webView 组件,我正在尝试将本地存储的 html 页面加载到该组件中:

WebView browser = new WebView();
WebEngine webEngine = browser.getEngine();
webEngine.load("/webView/main.html");

我的 html 文档(可能不正确)存储在以下位置:

com.cds.gui 包含我试图加载文件的类。如果我打印出webEngine.getDocument() 我得到null - 即文档没有被加载。

请告诉我哪里出错了!谢谢。

【问题讨论】:

假设此代码在 com.cds.gui 包中的类中,请尝试 webEngine.load(getClass().getResource("webView/main.html").toExternalForm());(注意路径上没有前导 /)。 @James_D 这正是我想要的,谢谢!您应该将此作为实际回复发布。 :) @Rapti 见***.com/questions/61531317/… 【参考方案1】:

您需要将本地文件作为 URL 读取,以便 WebEngine 可以找到它。例如,您可以使用

找到该文件作为资源
URL url = this.getClass().getResource("/com/cds/gui/webView/main.html");
webEngine.load(url.toString());

或者您可以将实际的字符串路径加载到文件对象中并使用它来获取字符串 URL。

File f = new File("full\\path\\to\\webView\\main.html");
webEngine.load(f.toURI().toString());

希望这会有所帮助!

【讨论】:

感谢您的回答,我尝试将文件作为 URL 读取,但仍然出现空指针异常? 你真的看到 WebView 本身加载了任何内容吗? 没什么,在 HTML 页面本身我只有段落标签中的文本 '123abc' 因此您想要打印 Document 对象,该对象通常需要更长的时间才能获得值集。您可以在引擎的 documentProperty 上添加一个 ChangeListener,它会在 Document 值从 null 更改为对象实例时通知您。 另外,如果您还没有这样做,请尝试使用包名作为文件路径的一部分。像这样:getResource("/com/cds/gui/webView/main.html");【参考方案2】:

您可以使用 URI 的文件语法,例如

file:///C:/path/to/file.html (Windows)

https://en.wikipedia.org/wiki/File_URI_scheme

【讨论】:

由于此应用程序将部署在许多不同的系统上,因此从我所学到的知识来看,这并不是一个真正的选择。但是,如果有办法获取类的当前位置(因为文件包含在当前项目的文件夹中),请告诉我!! 可能是这样的?:community.oracle.com/thread/3519040?start=0&tstart=0 我正在尝试String url = Main.class.getResource("/webview/main.html").toExternalForm(); 并得到一个空指针异常。 不应该,但从类路径的根目录尝试:/com/cds/gui/webView/main.html。并注意“webView”中的大写 V(根据您上面的结构)。【参考方案3】:

长期被文件路径折磨,这对我有用(Maven项目,文件夹资源):

WebEngine engine = html.getEngine();
            File f = new File(getClass().getClassLoader().getResource("html/about.htm").getFile());
            engine.load(f.toURI().toString());

【讨论】:

以上是关于尝试将本地页面加载到 JavaFX webEngine的主要内容,如果未能解决你的问题,请参考以下文章

JavaFX 2.0+ WebView /WebEngine 将网页呈现为图像

JavaFX - 保存/加载 - 形状/布局

使用 javafx 从 webview 获取内容

JavaFX - 加载图像和内存问题

JavaFX borderpane.setCenter 替换了整个场景

使用资源文件夹在使用 IntelLiJ 的 JavaFX 项目上加载图像