Comment générer une exception de délai d'attente simple en Java ?
Publié: 2018-02-26En Java, comment générer une simple TimeoutException ?
Dans ce didacticiel, nous allons générer une erreur de délai d'attente en appelant Google.com
avec un simple délai de 10 millisecondes. CrunchifyGenerateTimeout est un appel public dans lequel nous appelons google.com en utilisant 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 ( ) ; } } } } } |
Exécutez simplement le programme ci-dessus en tant qu'application Java et vous pourrez générer TimeoutException dans la console Eclipse.
Si vous augmentez ReadTimeout à 1000 millisecondes, vous ne pourrez pas régénérer l'exception.
// 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) |
