JEditorPane 在显示包含 COMBINING MACRON 的 HTML 文件时挂起。解决方案?

问题描述 投票:0回答:1

我们的 XML 编辑器使用 JEditorPane 来显示使用样式表转换的 HTML。当传入的 XML 包含组合宏(例如 x̄)时,系统会在 JEditorPane 中渲染期间挂起,尽管生成的 HTML 可以毫无问题地显示在浏览器中。它使用自定义的 HTMLEditorKit 和 JEditorPane。目前使用的是 JDK 11。

我尝试用 XML 中的字符引用

̄
替换组合宏宏。

textContent = textContent.replaceAll("\\u0304", "̄");

原创,

\<p id="p0007" num="0007"\>LCL=x̄-(t\*(s /√n));\</p\>

之后,

\<p id="p0007" num="0007"\>LCL=x&#x0304;-(t\*(s /√n));\</p\>

但是在 JEditorPane 中渲染时系统仍然挂起。

如有任何建议或建议,我们将不胜感激。

最好的,

java xml jeditorpane
1个回答
0
投票

感谢 Holger 和 VGR 的解答。根据提示,我发现问题是由自定义的HTMLEditorKit引起的。为了快速修复在不系统挂起的情况下显示 HTML 的问题,我添加了一个开关,以避免在识别出组合宏宏时使用有问题的自定义编辑套件:

private void setHtmlEditorContentType(String xmlText) {
    if (this.hasCombingMacro(xmlText) {
        //For handling tif images but may have performance issue            
        patchEditor = this.getPatchedHTMLEditorKit();       
        patchEditor.install(webBrowser);
        webBrowser.setEditorKitForContentType("text/html", patchEditor);
    }else {
        patchEditor.deinstall(webBrowser);
        webBrowser.setEditorKit(null);
        webBrowser.setContentType("text/html");
    }
}

//Check Combing Macro
private boolean hasCombingMacro(String xmlText) {
    if(xmlText.contains("\u0304") || xmlText.contains("&#x0304;")) {
        return true;
    }
    return false;
}
© www.soinside.com 2019 - 2024. All rights reserved.