Как сохранить работоспособность кода даже после исключения - PullRequest
0 голосов
/ 09 мая 2018

Я использую Jsoup для подключения к веб-сайту для получения данных HTML. У меня есть список из примерно 1000 URL-адресов, из которых мне нужно получить данные, и я перебираю эти URL-адреса. Для нескольких сценариев я получаю исключение:

Exception in thread "main" java.net.SocketTimeoutException: connect timed out
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)

Это останавливает обработку оставшихся URL. Я попытался изменить timeout () на timeout (0), но это позволяет коду бесконечно запускаться для этого URL.

Есть ли способ пропустить URL-адреса, по которым я получаю исключение, чтобы код выполнялся для остальных.

Ответы [ 3 ]

0 голосов
/ 09 мая 2018

вам нужен код в блоке try-catch, и после перехвата этого исключения вы можете обработать его, записав его в логгер или около того. Обработка исключения приведет к продолжению программы.

0 голосов
/ 09 мая 2018

Вы должны использовать try - catch внутри цикла:

public static void main(String[] args){
    for (int i=0; i<10; i++) {
        try {
            //your code goes here
        } catch (ExceptionType name) {
            //error-handling code
        }
    }
}

Подробнее об этом здесь .

0 голосов
/ 09 мая 2018

Вы можете заключить ваш звонок в try { ... } catch (E e) { ... } пункт

try {
    // Connect to the website
} catch (SocketTimeoutException ste) {
    ste.printStackTrace();
}
...