2

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

如果我在使用设置页面后尝试直接处理页面

 JEditorPane.setPage(URL);
 if( outputTracker.getText().contains("desktop_process") )

即使我为 JEditorPane 指定了文本/纯文本内容类型,它也会返回一个空白 HTML 页面:

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

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

目前我正在设置页面,然后启动一个 Swing Timer 并每 200 毫秒检查一次页面是否包含正确生成的字符串:

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 输出,将其从动态生成的输出中直接读取到字符串中,而不使用编辑器窗格,因为编辑器窗格无论如何都不可见?

希望这足够清楚。

谢谢。

4

1 回答 1

2

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

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

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

于 2010-11-23T04:15:30.620 回答