2010-11-23 106 views
2

我試圖加載URL到JEditorPane或JTextPane中,但網址是動態生成的PHP頁面。然後我想在我的Java應用程序中處理來自PHP頁面的輸出。 PHP頁面將始終輸出至少一個可用於檢查其是否正確生成的字符串。如何判斷JEditorPane/TextPane文檔或頁面是否已完成加載?

如果我嘗試設置使用

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

它返回一個空白的HTML頁面,即使我指定的JEditorPane文本/純內容類型的頁面後直接處理頁面:

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

我想這是因爲PHP頁面尚未加載完畢,如下方法將每次返回正確的輸出。

目前我設置頁面,然後開始一個Swing計時器和每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輸出,閱讀它直接轉換成字符串從動態生成的輸出,而不使用編輯器窗格作爲editorpane是不可見反正更好的辦法?

希望這是非常明顯的。

謝謝。

回答

2

您可以添加一個PropertyChangeListener編輯窗格:

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

然而,這隻會告訴你加載主頁時。它不會告訴你圖像或其他相關文件何時完成加載。

+0

OK涼爽。非常感謝。我在文檔上嘗試了一個文檔propertyChangeListener,但是在顯示正確的結果之前,它返回了多次。沒想到要嘗試將文檔更改爲頁面。我會試一試。我正在加載的頁面是純文本,因此我不需要擔心外部文件。謝謝 – drent 2010-11-23 08:57:01

相關問題