本文目录导读:

你提到的 JEditorPaneHTMLEditorKitParserMethodIllegalSelector 看起来像是一个自定义的异常类名或错误消息,通常出现在使用 Java Swing 的 JEditorPane 和 HTMLEditorKit 解析 HTML 时,遇到了非法或不被支持的选择器(Selector)。
常见原因
-
使用了 CSS 选择器而非 HTML 标签/属性
HTMLEditorKit的解析器(尤其是较老版本的 Swing)通常不支持 CSS 选择器(如#id,.class,div > p),如果你在 HTML 文本或样式块中写了类似div.myClass或#main这样的选择器,解析器可能会抛出非法选择器异常。 -
自定义解析逻辑中使用了不支持的语法
如果你自己在解析器中扩展了HTML.Tag或HTML.Attribute,并且试图用不标准的格式(如[attr=value])匹配,也可能触发此错误。 -
误将标记符当作选择器
例如在 HTML 内容中意外写了<<<、>>>或包含 、 的无效标签名,解析器可能将其解释为选择器尝试匹配。
解决方法
避免在 HTML 内容中使用 CSS 选择器
JEditorPane 的 HTMLEditorKit 只支持 HTML 3.2 / 4.01 的部分标签和属性,不支持 CSS 选择器,请确保:
- 不使用
<style>标签内的 CSS 选择器(它只解析部分属性,如font-family,color,但不会理解#id或.class)。 - 直接使用 HTML 标签属性,
<font color="red">文字</font> <p align="center">段落</p>
而不是
<p class="center">(类选择器不支持)。
清理 HTML 内容
如果你从外部来源获取 HTML(如网页、用户输入),可能包含现代 CSS 选择器,建议用正则或 HTML 清理工具移除或替换这些选择器,
String html = ...
// 移除 style 标签中的选择器部分
html = html.replaceAll("<style[^>]*>.*?</style>", "");
// 或者只保留简单标签
升级或替换解析器(更推荐的长期方案)
HTMLEditorKit 的解析能力非常有限,如果必须处理现代 HTML(包含 CSS 选择器),考虑:
- 使用 JSoup 解析 HTML,然后将简单格式写入
JEditorPane。 - 使用 JavaFX 的 WebView(
javafx.scene.web.WebView)直接渲染完整 HTML/CSS。
检查自定义代码
如果你自己扩展了 HTMLEditorKit.Parser 或 HTML.Tag,请确认没有把类似 #id 的字符串当作标签名传给解析方法。
示例:错误与正确用法对比
错误(会触发非法选择器):
JEditorPane editor = new JEditorPane();
editor.setContentType("text/html");
editor.setText("<div id='main' style='color:red'>内容</div>"); // #main 不被支持
正确(使用简单标签或属性):
editor.setText("<font color='red'>内容</font>");
// 或
editor.setText("<body><p><b>加粗</b>正常</p></body>");
这个错误通常是因为你传给 JEditorPane 的 HTML 包含了它无法解析的现代 CSS 选择器语法,最简单的修复方法是确保 HTML 内容只使用基本的 HTML 标签(如 <font>, <b>, <p>, <table>)和 style 属性中的简单 CSS 属性(如 color, font-size),而不使用类或 ID 选择器,如果确实需要复杂样式,建议改用 JavaFX WebView 或其他富文本组件。
如果你能提供触发错误的具体 HTML 代码片段,我可以给出更精确的修复建议。