如何判断JEditorPane / TextPane文档或页面是否已完成加载?

时间:2010-11-23 02:29:09

标签: java php jeditorpane jtextpane

我正在尝试将URL加载到JEditorPane或JTextPane中,但URL是动态生成的PHP页面。然后我想在我的Java应用程序中处理PHP页面的输出。 PHP页面将始终输出至少一个我可以用来检查它是否正确生成的字符串。

如果我在使用

设置页面后尝试直接处理页面
 JEditorPane.setPage(URL);
 if( outputTracker.getText().contains("desktop_process") )

它返回一个空白的HTML页面,即使我为JEditorPane指定了text / plain内容类型:

System.out.println(outputTracker.getText() );

我认为这是因为PHP页面还没有完成加载,因为下面的方法每次都会返回正确的输出。

目前我正在设置页面,然后启动一个Swing Timer,如果页面包含正确生成的字符串,则每200ms检查一次:

private void getPageBtnActionPerformed(java.awt.event.ActionEvent evt) {                                        
    outputTracker.setPage("URL_GOES_HERE?variables=x&y=a");
    check_response_timer.start();
}

ActionListener checkAction = new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
        if( outputTracker.getText().contains("desktop_process") ) {
            System.out.println("Checking results...");
            check_response_timer.stop();
            process_response();
        } else {
            num_checks++;
            System.out.println("Checking results...");
            if( num_checks == 10 ) {
                check_response_timer.stop();
                checkLater = true;
                responseLbl.setText("Connection timeout. Please click reconnect to check again.");
                num_checks = 0;
            }
        }
    }
};
private Timer check_response_timer = new Timer(200,checkAction);

这很好用。 在当前服务器负载和正在加载的PHP页面的当前复杂性时,循环在第一次迭代后停止,但它看起来效率有点低,我不想继续检查页面是否需要几秒钟才能加载在繁重的服务器负载或更复杂的PHP页面上。

我想知道是否有更好的方法来检查页面是否已完成加载。

我想知道我是否可以使用JEditorPane.read(inputStream)方法或在Swing Background Worker线程中设置页面,然后在调用worker的done()时处理PHP页面的输出。

是否有更好的加载PHP输出的方法,直接将其从动态生成的输出中读入字符串而不使用编辑器窗格,因为编辑窗格无论如何都不可见?

希望这很清楚。

感谢。

1 个答案:

答案 0 :(得分:2)

您可以将PropertyChangeListener添加到编辑器窗格中:

editorPane.addPropertyChangeListener("page", ...);

但是,这只会告诉您何时加载主页面。它不会告诉您何时图像或其他相关文件已经完成加载。