我正在构建一个项目,需要使用WebEngine类。所以我有2个项目,MainA
和SecondB
。 SecondB
项目依赖于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上找到的选项,但没有成功
答案 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文件,这样会更好。