Java 使用try-catch跳过异常会导致陷入无限循环
对于某些URL,Java 使用try-catch跳过异常会导致陷入无限循环,java,exception,exception-handling,httpurlconnection,connection-timeout,Java,Exception,Exception Handling,Httpurlconnection,Connection Timeout,对于某些URL,BufferedReader达到连接超时,并抛出一个中断整个程序的异常,这是我遇到的困难。我需要的是检查连接打开所花费的时间,如果它达到阈值(必须小于超时值),它将跳过该URL打开流,然后获取下一个URL,或者它以不会导致程序停止的方式处理超时。你知道怎么做吗 URL url = new URL(line); URLConnection connection = url.openConnection(); if (connection instanceof HttpURLConn
BufferedReader
达到连接超时,并抛出一个中断整个程序的异常,这是我遇到的困难。我需要的是检查连接打开所花费的时间,如果它达到阈值(必须小于超时值),它将跳过该URL打开流,然后获取下一个URL,或者它以不会导致程序停止的方式处理超时。你知道怎么做吗
URL url = new URL(line);
URLConnection connection = url.openConnection();
if (connection instanceof HttpURLConnection) {
HttpURLConnection httpConn = (HttpURLConnection) connection;
int statusCode = httpConn.getResponseCode();
if (statusCode <= 200 && statusCode < 300)
try{
BufferedReader brURL = new BufferedReader(new InputStreamReader(url.openStream()));
while((tempLine = brURL.readLine())!=null){
UrlMatcher=UrlPattern.matcher(tempLine);
java.util.logging.Logger.getLogger(SimpleCrawler.class.getName()).log(Level.SEVERE, tempLine);
if(UrlMatcher.find())
{
String resultURL=UrlMatcher.group();
fop.write(resultURL.toLowerCase().getBytes());
fop.write(System.getProperty("line.separator").getBytes());
System.out.println(resultURL);
}
}
}
catch(ConnectException ex){}
}
您应该使用
setConnectTimeout
,然后捕获SocketTimeoutException
try {
HttpURLConnection con = (HttpURLConnection) new URL(url).openConnection();
con.setConnectTimeout(5000); //set timeout to 5 seconds
return (con.getResponseCode() == HttpURLConnection.HTTP_OK);
}
catch (java.net.SocketTimeoutException e) { return false; }
请看这里。为什么不捕获异常?@VinceEmigh您的意思是使用try-catch?是的,捕获
ConnectionException
。如果抛出一个运行时expetion,如果您捕获它,它不会使线程崩溃it@VinceEmigh那怎么抓住它呢?我的意思是,在这种情况下,catch部分会是什么?是的,因为抛出了一个ConnectException
,这就是您想要捕获的异常。它说将返回类型更改为Boolean
,这样做,或者在连接超时时将return false
更改为您需要的任何内容。@EJP如果我将其更改为Boolean,那么主线程必须是布尔类型,这是不可能的。@EJP此外,我已经提到了我在连接超时时想要的,只是跳过URL并从brURL获取下一个URL。我必须说他的回答根本不起作用,它仍然抛出异常并中断线程。然而,我的问题中上面的代码通过了这一点,但随后,我将陷入一个无限循环,我不知道为什么代码>至继续代码>,或任何您需要进入下一个URL的内容。您还没有发布代码的这一部分,期望其他人猜测可能需要什么是不合理的。
rum-static.pingdom.net/prum.min.js //the last match
SEVERE: var flashvars = {};
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: flashvars.enableAPI = "true";
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: flashvars.galleryURL = "/svgallerysource.asp?galleryid=685";
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: var params = {};
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: params.bgcolor = "222222";
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: params.allowfullscreen = false;
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: params.allowscriptaccess = "always";
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: params.wmode = "transparent";
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: var attributes = {};
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: attributes.id = "svInstance";
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: attributes.name = "svInstance";
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: simpleviewer.ready(function () {
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: simpleviewer.load('flashContent', '920', '420', '222222', true, flashvars, params, attributes, true);
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: });
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: </script>
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE:
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: <link href="http://cdn-images.mailchimp.com/embedcode/slim-081711.css" rel="stylesheet" type="text/css">
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: <style type="text/css">
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: #mc_embed_signup{background:#fff; clear:left; font:14px Helvetica,Arial,sans-serif; }
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: </style>
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE:
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE:
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE:
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: <script type="text/javascript" src="/jplayer/jquery.jplayer.min.js"></script>
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: <script type="text/javascript" src="/jplayer/jquery.jplayer.inspector.js"></script>
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: <link rel="stylesheet" href="/css/colorbox.css" />
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE:
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE:
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: <script>
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: var _prum = [['id', '5397955dabe53dbb3ea78d70'],
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: ['mark', 'firstbyte', (new Date()).getTime()]];
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: (function() {
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: var s = document.getElementsByTagName('script')[0]
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: , p = document.createElement('script');
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: p.async = 'async';
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: p.src = '//rum-static.pingdom.net/prum.min.js';
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: s.parentNode.insertBefore(p, s);
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: })();
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: </script>
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE:
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE:
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE:
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE:
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE:
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE:
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE:
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE:
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: <style>
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE:
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: body
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: {
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: background-color: #ffffff;
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: }
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE:
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: div#bodycontainer-home
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: {
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: background-color:
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: #ffffff;
Nov 27, 2015 6:53:27 PM simplecrawler.SimpleCrawler openConnection
SEVERE: background-image:url(/images/uploaded/540973958472458.png);
try {
HttpURLConnection con = (HttpURLConnection) new URL(url).openConnection();
con.setConnectTimeout(5000); //set timeout to 5 seconds
return (con.getResponseCode() == HttpURLConnection.HTTP_OK);
}
catch (java.net.SocketTimeoutException e) { return false; }