JavaFX WebView访问部分网站抛出StringIndexOutOfBoundsException求助
JavaFX WebView加载特定网站时抛出StringIndexOutOfBoundsException的解决办法
最近帮朋友排查JavaFX项目时遇到过一模一样的问题——用WebView加载https://stackoverflow.wordpress.com时直接抛出了StringIndexOutOfBoundsException,先给你还原下当时的场景和可行的解决办法:
问题重现的代码
WebView browser = new WebView(); WebEngine webEngine = browser.getEngine(); setTop(browser); webEngine.load("https://stackoverflow.wordpress.com");
触发的报错信息
java.lang.StringIndexOutOfBoundsException: String index out of range: 4
at java.lang.String.substring(Unknown Source)
at com.sun.javafx.webkit.prism.WCFontImpl.getGlyphsAndAdvances(WCFontImpl.java:120)
at com.sun.webkit.network.URLLoader.twkDidRec...
几个实用的解决方案
- 优先升级JavaFX版本:这个异常本质是旧版JavaFX的字体渲染模块bug,尤其是处理某些网页特殊字体时的索引越界问题。建议直接升级到JavaFX 17及以上的LTS稳定版本,官方已经修复了这类底层渲染的漏洞。
- 强制替换网页字体(临时应急):如果暂时没法升级依赖,可以通过WebEngine的用户样式表强制让网页使用系统安全字体,绕过有问题的字体处理逻辑。代码示例如下:
// 强制所有元素使用Arial或系统默认无衬线字体 webEngine.setUserStyleSheetLocation("data:text/css,* { font-family: 'Arial', sans-serif !important; }"); - 检查系统字体配置:少数情况下,系统缺失网页依赖的特定字体也会触发这个异常。可以检查系统是否安装了常用的无衬线字体(比如Arial、微软雅黑),或者尝试重置系统字体缓存(不同系统操作不同,Windows可重启字体服务,Mac可重建字体缓存)。
内容的提问来源于stack exchange,提问作者user6266369
相关产品推荐
相关产品推荐

