Javafx WebEngine从jar加载html文件

时间:2017-02-07 13:04:53

标签: javafx javafx-webengine

我正在构建一个项目,需要使用WebEngine类。所以我有2个项目,MainASecondBSecondB项目依赖于MainA,因此构建后SecondB成为MainA libs文件夹中的jar文件。
现在。我需要打开abc.html资源下的SecondB文件。在本地测试时,它可以工作,在构建应用程序并在服务器上部署它时失败(可能是因为它在SecondB jar文件中)。所以我使用的代码是:

WebView browser = new WebView();
WebEngine webEngine = browser.getEngine();  
ClassLoader classLoader = getClass().getClassLoader();
String s = classLoader.getResource("subfolder/abc.html").toExternalForm();
webEngine.load(s);

方法classLoader.getResource("subfolder/abc.html").toExternalForm();在运行代码localy时返回正常的url,例如:

file:jar:C:/Something/MainA/libs/SecondB.jar!/subfolder/abc.html

您对如何从jar加载此文件有任何想法吗?我尝试了几个我在SO上找到的选项,但没有成功

3 个答案:

答案 0 :(得分:0)

您可以创建“资源”包并将文件复制到此包并访问您的文件路径,例如html,您可以使用:getClass().getResource("/resources/abc.html").toURI().toString()这可以在您创建的jar中获取文件URL。希望它有用。

答案 1 :(得分:0)

对我来说,我做到了

String fileloc = "/docs/help/userguide.html";
...
String fullLink = getClass().getResource(fileloc).toExternalForm();
...

我将html文件存储在资源文件夹中。例如/resources/docs/help/userguide.html

运行编译的jar时,由javafx Webengine加载它没有问题。

答案 2 :(得分:0)

我想您快到了,您可以通过InputStream将网址读入String,并使用WebEngine.loadContent加载String内容,前提是您只想显示单页。如果您的页面引用了其他文件(javascript / css),它将无法正常工作。

因此,这样做更好,在启动JavaFX应用程序时,您将整个资源文件夹复制到本地文件系统中,然后使用WebEngine加载HTML文件,这样会更好。