看起来你遇到了 Java Swing 中 JEditorPane 配合 HTMLEditorKit 解析 HTML 时的一个常见问题,通常表现为 "Parser method closed unexpectedly" 或选择器相关错误。

常见原因和解决方案
HTML 格式不完整或嵌套错误
HTMLEditorKit 的解析器对 HTML 格式要求严格:
JEditorPane editor = new JEditorPane();
editor.setContentType("text/html");
editor.setText("<html><body><p>Hello World</p></body></html>"); // 必须完整
❌ 错误示例:
editor.setText("<p>Hello</p>"); // 缺少 html/body 标签,可能触发解析错误
特殊字符和选择器冲突中包含 CSS 选择器或特殊字符时:
String html = "<html><body>"
+ "<style>"
+ ".myClass { color: red; }" // 大括号可能被解析器误解
+ "</style>"
+ "<div class='myClass'>Test</div>"
+ "</body></html>";
解决方案:转义或简化样式
使用正确的解析器设置
HTMLEditorKit kit = new HTMLEditorKit();
editor.setEditorKit(kit);
// 禁止外部资源加载,减少解析压力
kit.setAutoFormSubmission(false);
// 使用简单的样式表
StyleSheet styleSheet = kit.getStyleSheet();
styleSheet.addRule("body { font-family: Arial; }");
处理复杂 HTML 的完整示例
import javax.swing.*;
import javax.swing.text.html.*;
public class SafeHtmlEditor {
public static void main(String[] args) {
JFrame frame = new JFrame();
JEditorPane editor = new JEditorPane();
// 设置编辑器套件
HTMLEditorKit kit = new HTMLEditorKit();
editor.setEditorKit(kit);
editor.setContentType("text/html");
// 安全的HTML内容
String html = "<html><body>" +
"<h1>标题</h1>" +
"<p style='color:blue'>这是蓝色文字</p>" +
"</body></html>";
// 使用Document直接设置(更稳定)
try {
HTMLDocument doc = (HTMLDocument) kit.createDefaultDocument();
kit.read(new StringReader(html), doc, 0);
editor.setDocument(doc);
} catch (Exception e) {
e.printStackTrace();
}
frame.add(new JScrollPane(editor));
frame.setSize(400, 300);
frame.setVisible(true);
}
}
如果问题持续存在
尝试使用更稳健的解析方式:
- 使用
javax.swing.text.html.parser.ParserDelegator手动解析 - 考虑使用第三方库如 JSoup 预解析后再放入
JEditorPane - 简化 HTML 内容,避免复杂的 CSS 选择器
最可能的解决方案:确保 HTML 始终以 <html><body> 开头,以 </body></html> 结束,并且所有标签正确闭合。
版权声明:足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播