Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo, wenn ich die Beschreibung der Methode urlCon.setReadTimeout richtig verstanden habe, soll eine Exception geworfen werden, wenn das auslesen der Seite länger als die mitgebene Zeitangabe andauert.
Ich habe nun einen Seitenaufruf der sehr viel länger als die 5 Sec dauert die ich mitgebe. Trotzdem kommt keine Exception. Hab ich die Methode falsch verstanden ?
Code:
URL url2 = new URL(url);
URLConnection urlCon = url2.openConnection();;
urlCon.setConnectTimeout(5000);
urlCon.setReadTimeout(5000);
BufferedReader in = new BufferedReader(new InputStreamReader(urlCon.getInputStream()));
Danke für den Tipp es liegt doch nicht an dem Auslesen sondern an der while-Schleife des Bufferreaders
Code:
while ((inputLine = in.readLine()) != null){
html = html +inputLine;
Denke es liegt daran, dass es Seiten gibt wie Zb. http://km.aifb.kit.edu/sites/corpex/data/de.txt, die eine fast unbegrenzte Anzahl an Zeilen besitzen. Aber wie kann ich da auschließen das mein Programm sich nicht aufhängt wenn es auf eine solche Seite stößt?
Ich gehe davon aus, dass es normalerweise nicht länger als 5 Sekunden dauert eine Html-Seite auszulesen. Um solche Seiten wie oben beschrieben zu Umgehen wollte ich einen Timeout einbauen, welcher die Seiten ignoriert die Länger dauern. Nur wie nrg mir ja aufgezeigt hat liegt das Problem nicht im einlesen der Seite.
Mometan habe ich es so gelöst, dass ich einen Zähler nebenbei mit in der While-Schleife laufen lasse und einen Grenzwert an Zeilen gesetzt habe.
Finde nur die Lösung nicht gerade besonders. Da es bestimmt auch Seiten gibt, auf denn die Information die ich haben will, hinter diesem Grenzwert steht.
man könnte bevor man mit dem Einlesen beginnt einen Timer starten, der nach Ablauf von x Sekunden ein Abbruchflag setzt, das in der while Schleife zusätzlich abgefragt wird und somit die Schleife nach Ablauf des Timers beendet.
### EDIT ###
Für das Zusammensetzen der Zeilen in der Schleife solltest Du einen StringBuffer oder StringBuilder verwenden, statt dauernd mit
Wäre eine Möglichkeit, allerdings hast Du so bei jedem Schleifendurchgang die Berechnung der Zeit, wodurch Du (Rechen)Zeit für das Einlesen selbst verlierst.
Meine Überlegung war einen Timer zu verwenden, der nach z.B 5000ms startet und ein boolean setzt.
Java:
cancel = false;
new java.util.Timer().schedule(new TimerTask() {
public void run() {
cancel = true;
}
}, 5000);