Я пытаюсь загрузить URL в JEditorPane или JTextPane, но URL является динамически генерируемой страницей PHP. Затем я хочу обработать вывод со страницы PHP в моем приложении Java. Страница PHP всегда будет выводить хотя бы одну строку, которую я смогу использовать для проверки правильности ее генерации.
Если я попытаюсь обработать страницу сразу после установки страницы с помощью
JEditorPane.setPage(URL);
if( outputTracker.getText().contains("desktop_process") )
возвращает пустую HTML-страницу, даже если для JEditorPane я указываю тип текстового / простого содержимого:
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, а затем обработать вывод PHP-страницы при вызове метода done () работника.
И есть ли лучший способ загрузки вывода PHP, считывания его прямо в строку из динамически генерируемого вывода без использования панели редактора, так как панель редактора в любом случае не видна?
Надеюсь, это достаточно ясно.
Спасибо.