Jak wygenerować prosty wyjątek limitu czasu w Javie?
Opublikowany: 2018-02-26Jak w Javie wygenerować prosty TimeoutException?
W tym samouczku wygenerujemy błąd Timeout przy wywołaniu Google.com
z prostym 10-milisekundowym opóźnieniem. CrunchifyGenerateTimeout to publiczne wywołanie, w którym wywołujemy google.com za pomocą connection.connect()
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
package crunchify . com . tutorial ; import java . io . BufferedReader ; import java . io . IOException ; import java . io . InputStreamReader ; import java . net . HttpURLConnection ; import java . net . URL ; /** * @author Crunchify.com * Program: How to Generate Simple TimeoutException for a specific IP in Java * Version: 1.0.1 * */ public class CrunchifyGenerateTimeout { public static void main ( String [ ] args ) throws Exception { new CrunchifyGenerateTimeout ( ) ; } public CrunchifyGenerateTimeout ( ) { try { String myUrl = "https://google.com/" ; // myUrl = URLEncoder.encode(myUrl, "UTF-8"); String results = crunchifyCallURL ( myUrl ) ; System . out . println ( results ) ; } catch ( Exception e ) { e . printStackTrace ( ) ; } } /** * Just return a result of URL call. * * @param crunchifyURL * @return * @throws Exception */ private String crunchifyCallURL ( String crunchifyURL ) throws Exception { URL crunchURL = null ; BufferedReader crunchReader = null ; StringBuilder crunchBuilder ; try { // create the HttpURLConnection crunchURL = new URL ( crunchifyURL ) ; HttpURLConnection connection = ( HttpURLConnection ) crunchURL . openConnection ( ) ; // Let's make GET call connection . setRequestMethod ( "GET" ) ; // Current Timeout 10 milliseconds - to generate Timeout Error connection . setReadTimeout ( 10 ) ; connection . connect ( ) ; // Simply read result and print line crunchReader = new BufferedReader ( new InputStreamReader ( connection . getInputStream ( ) ) ) ; crunchBuilder = new StringBuilder ( ) ; String eachLine = null ; while ( ( eachLine = crunchReader . readLine ( ) ) ! = null ) { crunchBuilder . append ( eachLine + "\n" ) ; } return crunchBuilder . toString ( ) ; } catch ( Exception et ) { et . printStackTrace ( ) ; throw et ; } finally { if ( crunchReader ! = null ) { try { crunchReader . close ( ) ; } catch ( IOException ioException ) { ioException . printStackTrace ( ) ; } } } } } |
Po prostu uruchom powyższy program jako aplikację Java i będziesz mógł wygenerować TimeoutException w konsoli Eclipse.
Jeśli zwiększysz ReadTimeout do 1000 milisekund, nie będzie można ponownie wygenerować wyjątku.
// connection .setReadTimeout(1000);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
java.net.SocketTimeoutException: Read timed out at java.base/java.net.SocketInputStream.socketRead0(Native Method) at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:116) at java.base/java.net.SocketInputStream.read(SocketInputStream.java:171) at java.base/java.net.SocketInputStream.read(SocketInputStream.java:141) at java.base/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:425) at java.base/sun.security.ssl.SSLSocketInputRecord.decode(SSLSocketInputRecord.java:154) at java.base/sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1031) at java.base/sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973) at java.base/sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1402) at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1429) at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1413) at java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:567) at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:163) at crunchify.com.tutorial.CrunchifyGenerateTimeout.doHttpUrlConnectionAction(CrunchifyGenerateTimeout.java:60) at crunchify.com.tutorial.CrunchifyGenerateTimeout.<init>(CrunchifyGenerateTimeout.java:29) at crunchify.com.tutorial.CrunchifyGenerateTimeout.main(CrunchifyGenerateTimeout.java:20) java.net.SocketTimeoutException: Read timed out at java.base/java.net.SocketInputStream.socketRead0(Native Method) at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:116) at java.base/java.net.SocketInputStream.read(SocketInputStream.java:171) at java.base/java.net.SocketInputStream.read(SocketInputStream.java:141) at java.base/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:425) at java.base/sun.security.ssl.SSLSocketInputRecord.decode(SSLSocketInputRecord.java:154) at java.base/sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1031) at java.base/sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973) at java.base/sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1402) at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1429) at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1413) at java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:567) at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:163) at crunchify.com.tutorial.CrunchifyGenerateTimeout.doHttpUrlConnectionAction(CrunchifyGenerateTimeout.java:60) at crunchify.com.tutorial.CrunchifyGenerateTimeout.<init>(CrunchifyGenerateTimeout.java:29) at crunchify.com.tutorial.CrunchifyGenerateTimeout.main(CrunchifyGenerateTimeout.java:20) |
