所以我想做的很简单。我正在使用ParserDelegator解析HTML文档中的脚本标签,并使用ParserCallback吐出脚本标签。但是,当我运行该程序时,它什么也没做。回调不会被调用。我的html文件路径正确,并且确实包含脚本标签。它的格式也正确。

import java.io.*;
import javax.swing.text.html.parser.ParserDelegator;
import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.html.HTML;
import javax.swing.text.SimpleAttributeSet;
import java.util.Enumeration;

public class JSFinder {
    //static ParserDelegator pd;
    public JSFinder () {
        //pd = new ParserDelegator();
    }

    public static void main(String args[]) {
        try {
            HTMLEditorKit.ParserCallback callback = new ScriptTagCallBack();
            new ParserDelegator().parse(new InputStreamReader(new FileInputStream(new File ("<path-to-html>"))), callback, false);
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
}
class ScriptTagCallBack extends HTMLEditorKit.ParserCallback {
    public ScriptTagCallBack() {
        super();
    }
    public void handleStartTag(HTML.Tag t, SimpleAttributeSet a, int pos) {
        if(t == HTML.Tag.SCRIPT) {
            System.out.println("Found a script tag");
            System.out.println(a);
        }
        else {
            System.out.println("Not a script tag");
        }
    }
    public void handleEndTag(HTML.Tag t, SimpleAttributeSet a, int pos) {
        if(t == HTML.Tag.SCRIPT) {
            System.out.println("Found a script tag");
            System.out.println(a);
        }
        else {
            System.out.println("Not a script tag");
        }
    }
}


知道我在做什么错吗?我已经看过示例(例如这样的例子:http://www.java2s.com/Tutorial/Java/0320__Network/HTMLparserbasedonHTMLEditorKitParserCallback.htm),并且我基本上在做同一件事(除了也许我没有重写ParserCallback的所有方法,而且我正在使用文件路径而不是URL) )。提前致谢。

最佳答案

使用@Override批注可以看到您正在隐藏而不是覆盖HTMLEditorKit.ParserCallback的方法。修复签名,它可以工作。

10-01 14:08