Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从javafx.scene.web.WebEngine#loadContent加载的html页面访问css和图像文件?_Java_Webview_Javafx 2 - Fatal编程技术网

如何从javafx.scene.web.WebEngine#loadContent加载的html页面访问css和图像文件?

如何从javafx.scene.web.WebEngine#loadContent加载的html页面访问css和图像文件?,java,webview,javafx-2,Java,Webview,Javafx 2,我有一个字符串HTML内容,通过loadContent()方法加载到webEngine。我也有一些css和图像文件在这个页面中使用。虽然我将这些文件放在java类的同一个包中,但加载的页面无法找到它们。查找API文档和web,但找不到任何合适的类似解决方案。如何加载这些文件?您需要为loadContent下一步设置html字符串中的本地路径: view.getEngine().loadContent( "<img src='" + getClass().getResource("1.jpg

我有一个字符串HTML内容,通过
loadContent()
方法加载到
webEngine
。我也有一些css和图像文件在这个页面中使用。虽然我将这些文件放在java类的同一个包中,但加载的页面无法找到它们。查找API文档和web,但找不到任何合适的类似解决方案。如何加载这些文件?

您需要为
loadContent
下一步设置html字符串中的本地路径:

view.getEngine().loadContent(
"<img src='" + getClass().getResource("1.jpg") + "' />");
view.getEngine().loadContent(
"");

您可以将字符串html内容放在与Java类相同的包中的文件中,并改用
引擎.load(字符串url)
方法:

engine.load(getClass().getResource("mypage.html").toExternalForm());
执行此操作时,html页面中的所有相关链接将解析为Java包中的资源(例如css和图像文件)

请注意,如果您正在加载位于jar文件中的资源,
jar:
协议不理解与父说明符的相对链接。例如,
将不起作用,但只要将图像放在jar文件中的适当位置,
就会起作用。
文件:
协议没有这样的限制,
相关链接在使用它加载资源时可以正常工作


如果html字符串是由java代码动态生成的,而不是静态生成的,那么Sergey的解决方案可能是最好的。

我刚刚发现,在html中使用
标记也可以达到以下目的:

<html>
    <head>
        <title>The slash at the end of the href is important!</title>
        <base href="file:///absolute/path/to/your/docroot/" />
    </head>
    <body>
        <img src="image.png"/>
    </body>
</html>

href结尾的斜杠很重要!
如果通过
engine.loadContent(String)
加载上述代码,则
image.png
将从
/absolute/path/加载到/your/docroot/image.png

如果需要加载多个资源,则此方法更容易,因为只需在单个位置指定绝对路径

这已经用Java8U25的
WebView
进行了测试。

试试这个

<link href="file:css\default.css" rel="stylesheet" type="text/css" />


您知道如何对内存中的BuffereImage执行此操作吗?@alistair您可以使用ImageIO类,它有一个读取缓冲图像的方法。