2012-03-31 47 views
1

你好家伙我试图从一个字符串数组中通过for循环打印标题,在打印时,在某些情况下无法建立连接并引发异常正在停止所有剩余的元素....如何忽略例外并继续循环从开始

我使用这个代码打印,可有一个人帮我忽略异常,并继续从字符串数组另一元素的循环......

for (int f = 0; f < fin.length; f++) //fin be string array of urls 
{ 
Document finaldoc = Jsoup.connect(fin[f]).get(); 
out.println(finaldoc.title()); 
} 

例外之一是

java.net.SocketTimeoutException: Read timed out 

回答

13

你需要一个try{ } catch { }

for (int f = 0; f < fin.length; f++) //fin be string array of urls 
{ 
    try { 
     Document finaldoc = Jsoup.connect(fin[f]).get(); 
     out.println(finaldoc.title()); 
    } 
    catch (SocketTimeoutException exception) { 
     continue; 
    } 
} 

显然,这不是很好的做法,因为它没有解决,甚至处理错误,但是这是你将如何继续通过迭代循环。

+1

'break' ...他想继续循环,不要离开它。另外,这是很好的做法。也许你想看看这些网址是否真实,并希望在正常情况下超时:你的评论也是错误的 – Bohemian 2012-03-31 19:53:27

+0

是的,我已经修复了:) – Igor 2012-03-31 19:53:55

+0

这将继续与字符串数组中的其他元素... – 2012-03-31 19:56:39

2

您可以提供一个空的陷阱:

for (int f = 0; f < fin.length; f++) //fin be string array of urls 
    { 
     try{ 
     Document finaldoc = Jsoup.connect(fin[f]).get(); 
     out.println(finaldoc.title()); 
     } catch(Exception e){} 
    } 
+0

这将继续与字符串数组中的其他元素... – 2012-03-31 19:55:32

+3

@KingAslan而不是问,如果它会继续或不,请自己尝试代码 – 2012-03-31 20:04:01

+0

谢谢....对于你的建议.....但我我在没有时间自己尝试的情况下... – 2012-03-31 20:10:53

0

你需要一个while循环,而不是一个循环。然后你可以捕捉到异常并继续前进。这将继续循环,同时以您选择的方式处理异常。当然,在异常处理程序中继续执行的操作与在接受的答案中执行的操作相同。哎呀!

int[] myArray = {1,2,3,4,5,4,2,3}; 
    int index = 0; 

    while(index < myArray.length) { 

     try { 
      if(myArray[index] == 4) { 
       throw new Exception(); 
      } else { 
       System.out.println(myArray[index]); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     index++; 
    }