Łapanie wyjątków w pętli

0

Witam, napisałem kod który pobiera ze strony troche informacji. Jak wszystkie operacje I/O zwraca od czasu do czasu bledy (SocketReadTimeout itp.). Postanowiłem to rozwiązac w ten sposób:

public class WebScraper extends Thread {

    public void run() {
        while (true) {
            try {
                 work();
             } catch (Exception ex) {
                 ex.printStackTrace();
             }
        }
    }

    public void work() throws IOException {
        //pobiera informacje ze strony
    }
}

W przypadku wystapienia bledu w bloku try opuszcza on cala reszte w tym bloku i kontynuuje działanie od linijki po catch. Czyli tutaj, w przypadku wystapienia wyjatku powinien przejsc do kolejnej iteracji, czyli odpalic metode na nowo, i od nwoa sprobowac pobrac informacje.
Niestety, przy wystapieniu jakiegos wyjatku program zamyka się z błedem. Prosze o pomoc, co robie nie tak?

0

Ale z jakim błędem?

0

Wrzucam StackTrace:

Exception in thread "Thread-0" java.lang.RuntimeException: java.net.SocketTimeoutException: Read timed out
	at com.gargoylesoftware.htmlunit.WebClient.download(WebClient.java:2233)
	at com.gargoylesoftware.htmlunit.html.HtmlAnchor.doClickStateUpdate(HtmlAnchor.java:128)
	at com.gargoylesoftware.htmlunit.html.HtmlAnchor.doClickStateUpdate(HtmlAnchor.java:138)
	at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1251)
	at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1198)
	at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1158)
	at ws.WebScraper.work(WebScraper.java:165)
	at ws.WebScraper.run(WebScraper.java:26)
Caused by: java.net.SocketTimeoutException: Read timed out
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(SocketInputStream.java:150)
	at java.net.SocketInputStream.read(SocketInputStream.java:121)
	at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:166)
	at org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:90)
	at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:281)
	at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:92)
	at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:62)
	at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:254)
	at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:289)
	at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:252)
	at org.apache.http.impl.conn.ManagedClientConnectionImpl.receiveResponseHeader(ManagedClientConnectionImpl.java:191)
	at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:300)
	at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:127)
	at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:717)
	at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:522)
	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
	at com.gargoylesoftware.htmlunit.HttpWebConnection.getResponse(HttpWebConnection.java:172)
	at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseFromWebConnection(WebClient.java:1486)
	at com.gargoylesoftware.htmlunit.WebClient.loadWebResponse(WebClient.java:1403)
	at com.gargoylesoftware.htmlunit.WebClient.download(WebClient.java:2226)
	... 7 more
0

Nie znasz obsługi błędu SocketTimeoutEcxeption w pakiecie com.gargoylesoftware.... Być może wpierw wyświetlana jest informacja o błędzie, a potem wywoływane jest System.exit().

1 użytkowników online, w tym zalogowanych: 0, gości: 1