2010-11-23 8 views
2

Ich versuche, eine URL in eine JEditorPane oder JTextPane zu laden, aber die URL ist eine dynamisch generierte PHP-Seite. Ich möchte dann die Ausgabe von der PHP-Seite in meiner Java-Anwendung verarbeiten. Die PHP-Seite gibt immer mindestens eine Zeichenfolge aus, mit der ich überprüfen kann, ob sie korrekt generiert wurde.Wie kann ich feststellen, ob ein JEditorPane/TextPane-Dokument oder eine Seite vollständig geladen wurde?

Wenn ich versuche und verarbeiten, um die Seite direkt nach der Seite

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

es gibt eine leere HTML-Seite mit Einstellung, auch wenn ich einen text/plain Inhaltstyp für die JEditorPane angeben:

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

Ich nehme an, dies liegt daran, dass die PHP-Seite nicht fertig geladen ist, da die Methode unten die korrekte Ausgabe jedes Mal zurückgibt.

Im Moment habe ich die Seite habe die Einrichtung und dann eine Swing-Timer starten und alle 200ms überprüft, ob die Seite mit dem korrekt generiert String enthält:

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); 

Dies funktioniert gut. Bei aktuellen Serverlasten und der aktuellen Komplexität der PHP-Seiten, die geladen werden, stoppt die Schleife nach der ersten Iteration, aber es scheint nur ein wenig ineffizient zu sein und ich möchte nicht weiter prüfen müssen, ob die Seite einige Sekunden dauern wird Laden während schwerer Serverlasten oder auf komplexeren PHP-Seiten.

Ich frage mich, ob es eine bessere Möglichkeit gibt zu überprüfen, ob die Seite geladen wurde.

Ich frage mich, ob ich die JEditorPane.read (inputStream) -Methode verwenden oder die Seite in einem Swing Background Worker-Thread festlegen und dann die Ausgabe der PHP-Seite verarbeiten kann, wenn der done() -Aufruf des Arbeiters aufgerufen wird.

Und gibt es eine bessere Möglichkeit, die PHP-Ausgabe zu laden, indem man sie direkt aus der dynamisch generierten Ausgabe ohne Verwendung eines Editorbereichs in eine Zeichenfolge einliest, da die Editor-Palette sowieso nicht sichtbar ist?

Hoffe, das ist klar genug.

Danke.

Antwort

2

Sie können eine Property zum Editorfenster hinzufügen:

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

Dies wird jedoch nur sagen, wenn die Haupt-Seite geladen wird. Es wird Ihnen nicht sagen, wenn Bilder oder andere verwandte Dateien fertig geladen haben.

+0

OK cool. Vielen Dank. Ich habe versucht, ein Dokument propertyChangeListener auf Dokument, aber dies zurückgegeben mehrere Male vor dem Anzeigen des korrekten Ergebnisses. Dachte nicht, um zu versuchen, Dokument zu Seite zu ändern. Ich werde es versuchen. Die Seiten, die ich lade, sind reiner Text, so dass ich mich nicht um externe Dateien kümmern muss. Danke – drent

+0

Das hat perfekt funktioniert! Vielen Dank! – drent

+0

Wenn es funktioniert, akzeptiere die Antwort. –

Verwandte Themen