我正在尝试将 URL 加载到 JEditorPane 或 JTextPane 中,但该 URL 是动态生成的 PHP 页面。然后我想在我的 Java 应用程序中处理 PHP 页面的输出。 PHP 页面将始终输出至少一个字符串,我可以用它来检查它是否正确生成。
如果我尝试在使用设置页面后直接处理页面
JEditorPane.setPage(URL);
if( outputTracker.getText().contains("desktop_process") )
它返回一个空白的 HTML 页面,即使我为 JEditorPane 指定了文本/纯内容类型:
System.out.println(outputTracker.getText() );
我认为这是因为 PHP 页面尚未完成加载,因为下面的方法每次都会返回正确的输出。
目前我正在设置页面,然后启动一个 Swing 计时器并每 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 后台工作线程中设置页面,然后在调用工作线程的 done() 时处理 PHP 页面的输出。
有没有更好的方法来加载 PHP 输出,直接从动态生成的输出中将其读入字符串,而不使用编辑器 Pane ,因为编辑器 Pane 无论如何都不可见?
希望这已经足够清楚了。
谢谢。
最佳答案
您可以将 PropertyChangeListener 添加到编辑器 Pane :
editorPane.addPropertyChangeListener("page", ...);
但是,这只会在主页加载时告诉您。它不会告诉您图像或其他相关文件何时完成加载。
关于java - 如何判断 JEditorPane/TextPane 文档或页面是否已完成加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4252204/