在我的JavaFX应用程序中,我使用Apache生成barcode4j的条形码,将其保存为目录/ data / images /中的png图像,并将其嵌入到JavaFX WebView上显示的网页中。
生成条形码后,我使用以下Javascript代码将其嵌入网页:
path = "file:/" + path.replace(/\\/gi,"/");
var barcodeElement = document.getElementById("productBarcode");
barcodeElement.setAttribute("src", path );
barcodeElement.style.display = "inline-block";
我使用绝对路径C:\ path \ to \ java-program \ data \ myimage.png并从中构建文件URL。 在Eclipse中使用它可以毫无问题地工作。但是当我构建我的项目并从我的jar文件启动它时,图像不会显示。但问题不在于,路径不正确或生成图片不起作用,因此存在某种“未找到”错误。图像应该是白色的,周围有一个浅色边框。
现在最奇怪的部分:如果右键单击图像并选择“在新窗口中打开”,则会显示图像!
有人对此有所了解吗?
非常感谢你!
答案 0 :(得分:0)
我的理解是WebView不会让加载了一个协议的页面使用另一个协议访问文件。当您通过http://和禁止文件://加载时,这非常有意义。在这里,您正在通过jar:file:...加载,而webview只允许您访问jar:file:... resources(我刚试过,我可以从同一个jar中访问另一个jar文件中的图像文件,但不是来自外部!)。
这听起来非常像是我的错误。
提到的一个解决方法here是使用“data:”URI(即直接在HTML文件中对图像进行编码)。