Java 为 URL.openStream() 设置超时
Java set timeout for URL.openStream()
我有一个简单的代码,可以从 URL 文本文件中读取一行:
url = new URL(address);
Scanner s = new Scanner(url.openStream());
s.nextLine();
但是URL服务器有点慢,需要几秒钟才能响应。我认为这是抛出异常的原因:
java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1651) ~[?:?]
at process.RunMe(MyFile2.java:115) [classes/:?]
at process.Detect(MyFile2.java:31) [classes/:?]
at Scheduler.PostHandler.run(MyFile.java:160) [classes/:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
at java.lang.Thread.run(Thread.java:834) [?:?]
如何为我的代码设置超时,或将其转换为我可以设置超时的方式?
Scanner::hasNextLine
总是在使用Scanner::nextLine
之前使用它以避免NoSuchElementException
。
示例:
import java.io.IOException;
import java.net.URL;
import java.util.Scanner;
public class ReadURL {
public static void main(String[] args) throws IOException {
URL url = new URL("http://www.example.com/");
Scanner s = new Scanner(url.openStream());
while (s.hasNextLine()) {
String str = s.nextLine();
System.out.println(str);
}
s.close();
}
}
我有一个简单的代码,可以从 URL 文本文件中读取一行:
url = new URL(address);
Scanner s = new Scanner(url.openStream());
s.nextLine();
但是URL服务器有点慢,需要几秒钟才能响应。我认为这是抛出异常的原因:
java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1651) ~[?:?]
at process.RunMe(MyFile2.java:115) [classes/:?]
at process.Detect(MyFile2.java:31) [classes/:?]
at Scheduler.PostHandler.run(MyFile.java:160) [classes/:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
at java.lang.Thread.run(Thread.java:834) [?:?]
如何为我的代码设置超时,或将其转换为我可以设置超时的方式?
Scanner::hasNextLine
总是在使用Scanner::nextLine
之前使用它以避免NoSuchElementException
。
示例:
import java.io.IOException;
import java.net.URL;
import java.util.Scanner;
public class ReadURL {
public static void main(String[] args) throws IOException {
URL url = new URL("http://www.example.com/");
Scanner s = new Scanner(url.openStream());
while (s.hasNextLine()) {
String str = s.nextLine();
System.out.println(str);
}
s.close();
}
}