質問: HtmlImage.getHeight または getWidth() を呼び出す前にタイムアウトを設定するにはどうすればよいですか?
環境:
HtmlUnit 2.10 を使用して要素の実際の画像サイズを取得し、ファイルのダウンロードを強制することができます。画像のダウンロードを開始すると言われている呼び出しは、HtmlImage.getHeight() または getWidth() です。ただし、特定の場合 (おそらくサイトが遅い場合など) には、この呼び出しが戻るまでに 15 分かかるようです。問題なく回復しているように見えますが、スレッドを中断したくありません。スレッドダンプの下は、この 15 分間のプロセス全体で次のようになります。
問題のテスト URL: http://www.bbc.co.uk/zhongwen/simp/chinese_news/2012/10/121006_feature_china_highway_jams.shtml
"R-pool-5-thread-19" daemon prio=10 tid=0x525d4400 nid=0x4400 runnable [0x513c7000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:150)
at java.net.SocketInputStream.read(SocketInputStream.java:121)
at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:166)
at org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:90)
at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:281)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:92)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:62)
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:254)
at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:289)
at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:252)
at org.apache.http.impl.conn.ManagedClientConnectionImpl.receiveResponseHeader(ManagedClientConnectionImpl.java:191)
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:300)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:127)
at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:712)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:517)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
at com.gargoylesoftware.htmlunit.HttpWebConnection.getResponse(HttpWebConnection.java:172)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseFromWebConnection(WebClient.java:1460)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponse(WebClient.java:1379)
at com.gargoylesoftware.htmlunit.html.HtmlImage.downloadImageIfNeeded(HtmlImage.java:374)
at com.gargoylesoftware.htmlunit.html.HtmlImage.readImageIfNeeded(HtmlImage.java:381)
at com.gargoylesoftware.htmlunit.html.HtmlImage.getHeight(HtmlImage.java:311)