本文目录导读:

这个错误信息看起来像是 Java 中 JEditorPane 和 HTMLEditorKit 解析 HTML 时遇到的一个问题,通常与 HTML 解析器的选择器(Selector)或 CSS 选择器有关。
根据你给出的错误信息 JEditorPaneHTMLEditorKitParserMethodIllegalSelector非法选择,可能的情况包括:
- 你对
HTMLEditorKit的解析器使用了非法或不支持的 CSS 选择器语法(比如在HTMLDocument.Iterator或HTML.Tag过滤中使用了不被支持的表达式)。 - 某些第三方库或自定义的 HTMLEditorKit 子类中,试图使用不支持的选择器方法。
- 错误提示中的“非法选择”其实是中文翻译“Illegal selector”,表示你使用了一个不合法的选择器字符串(例如空字符串、包含非法字符或格式错误的 CSS 选择器)。
可能的原因和解决办法
检查是否使用了 CSS 选择器(StyleSheet 中的规则)
HTMLEditorKit 的 StyleSheet 支持部分 CSS 选择器,但不完整,尤其是复杂选择器(如 nth-child、[attr^=val] 等)可能不被支持。
- 解决办法:简化选择器,仅使用标签名、类名、ID 等基本选择器。
p、.myclass、#myid。
检查是否在 HTMLDocument.Iterator 或 HTML.Tag 过滤中使用了选择器字符串
如果你在解析 HTML 时使用了类似 getIterator(HTML.Tag) 然后尝试用 select 方法过滤,但传入了非法的参数:
HTMLDocument doc = (HTMLDocument) editor.getDocument(); HTMLDocument.Iterator it = doc.getIterator(HTML.Tag.A); // 错误用法:直接传递选择器字符串到某个不支持的方法
- 解决办法:不要直接向
HTMLDocument.Iterator传递复杂选择器(它只接受标签类型)。
检查是否使用了第三方库(如 Jsoup、Cobra)或自定义解析器
如果你将 HTMLEditorKit 替换为自定义的解析器(例如扩展了 HTMLEditorKit.Parser),该解析器可能不支持某些选择器。
- 解决办法:查看自定义解析器的文档,确认其支持的选择器语法,或回退到默认的
HTMLEditorKit。
检查错误的中文翻译
“非法选择” 很可能就是 “非法选择器” 的意思,你可以尝试在代码中搜索类似 .select("...") 或 parseSelector(...) 的地方,看是否传入了一个空字符串、包含空格/特殊字符的选择器。
检查 HTML 内容是否包含非法样式
HTML 内容中包含 style 属性或 <style> 标签,且其 CSS 选择器语法有误,解析器也可能抛出此错误。
- 解决办法:清理 HTML 样式,或使用
HTMLEditorKit的默认样式(不去解析复杂的 CSS)。
示例:如何正确使用 HTMLEditorKit 解析 HTML
JEditorPane editor = new JEditorPane();
editor.setEditorKit(new HTMLEditorKit());
editor.setText("<html><body><p class='test'>Hello</p></body></html>");
// 获取样式表并设置简单的样式
StyleSheet styleSheet = ((HTMLEditorKit) editor.getEditorKit()).getStyleSheet();
styleSheet.addRule(".test { color: red; }"); // 仅支持简单选择器
不要尝试:
styleSheet.addRule(".test:first-child { color: red; }"); // 可能不支持