6

I'm trying to read URL in java, and it works as long as the URL is loading in browser.

But if it is just cylcing in the browser and not loading that page when I'm trying to open it in my browser, my java app just hangs, it will probably wait forever given enough time. How do I set timeout on that or something, if its loading for more than 20 seconds that I stop my application?

I'm using URL

Here is a relevant part of the code :

 URL url = null; String inputLine; try { url = new URL(surl); } catch (MalformedURLException e) { e.printStackTrace(); } BufferedReader in; try { in = new BufferedReader(new InputStreamReader(url.openStream())); while ((inputLine = in.readLine()) != null) { System.out.println(inputLine); } in.close(); } catch (IOException e) { e.printStackTrace(); } 
1
  • mind posting some relevant code? Commented Jun 7, 2011 at 22:45

4 Answers 4

10

I don't know how u are using the URL class. It would have been better if post a snippet. But here is a way that works for me. See if it helps in your case:

 URL url = new URL(urlPath); URLConnection con = url.openConnection(); con.setConnectTimeout(connectTimeout); con.setReadTimeout(readTimeout); InputStream in = con.getInputStream(); 
Sign up to request clarification or add additional context in comments.

Comments

2

The URL#openStream method is actually just a shortcut for openConnection().getInputStream(). Here is the code from the URL class:

public final InputStream openStream() throws java.io.IOException { return openConnection().getInputStream(); } 
  • You can adjust settings in the client code as follows:

    URLConnection conn = url.openConnection(); // setting timeouts conn.setConnectTimeout(connectTimeoutinMilliseconds); conn.setReadTimeout(readTimeoutinMilliseconds); InputStream in = conn.getInputStream(); 

Reference: URLConnection#setReadTimeout, URLConnection#setConnectTimeout

  • Alternatively, you should set the sun.net.client.defaultConnectTimeout and sun.net.client.defaultReadTimeout system property to a reasonable value.

Comments

1

If you are using a URLConnection (or HttpURLConnection) to "read from a url" you have a setReadTimeout() method which allows you to control that.

Edited after you posted the code:

URL url = null; String inputLine; try { url = new URL(surl); } catch (MalformedURLException e) { e.printStackTrace(); } BufferedReader in; try { URLConnection con = url.openConnection(); con.setReadTimeout( 1000 ); //1 second in = new BufferedReader(new InputStreamReader(con.getInputStream())); while ((inputLine = in.readLine()) != null) { System.out.println(inputLine); } in.close(); } catch (IOException e) { e.printStackTrace(); } 

2 Comments

I'm guessing you use URL then call openConnection() on it which returns an URLConnection?
ok i've just added the modified code -- i'm sure you can spot the 2 new lines and the change in the line with BufferedReader
0

You should add internet permission in AndroidMenifest.xml

<uses-permission android:name="android.permission.INTERNET" /> 

and add it in the main function:

if (android.os.Build.VERSION.SDK_INT > 9) { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); } 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.