-1

開始/一時停止ボタン(制御およびxmlエクストラクタ)を備えたWebページがあり、クリックすると次のjquery関数が実行されます。

function start() {
    // Posts to the start servlet
    $.post("servlets/start", function(data) {
        update();
    });
}

URL「servlets/start」を「StartServlet.java」という名前のHttpServletにマッピングするweb.xmlファイルがあります。このサーブレットのdoPostメソッドは、新しいスレッドでxml抽出機能を開始するか、抽出機能がすでに実行されている場合は一時停止する必要があります。以上です。doPostメソッドは、以下に示すようにstartExtractor()を呼び出すだけです。

    private void newExtractor() {
        ArrayList<URL> urls = null;
        try {
            String path = this.getServletContext().getRealPath(
                    "internalLinks.txt");
            urls = GlobalUtils.getLinks(path);
            extractor = new Extractor(urls);
            thread = new Thread(extractor);
            fillContextPool(extractor, false);
        } catch (IOException e) {
            System.out.println("Failed to start");
        }
    }

    private void startExtractor() {
        if (thread == null) {
            newExtractor();
            thread.run();
        } else {
            extractor.togglePause();
            fillContextPool(extractor, stopForced);
        }
    }  

問題は、エクストラクタが完了するまでjqueryの投稿が完了しないことです。つまり、エクストラクタが終了するまでボタンを再度クリックすることはできません。基本的に、エクストラクタを実際に一時停止することは不可能です。

エクストラクタが開始され、終了するまで待つ必要がないので、息子として投稿を完了する方法についてのアイデアはありますか?

前もって感謝します!

4

1 に答える 1

1

start()メソッドを使用してスレッドが開始されます。メソッドではありませんrun()

于 2012-05-25T12:00:11.093 に答える