Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

retenter d'executer du code dans une exception

5 réponses
Avatar
vec
bonjour,

Je ne comprend pas trop comment en attrapant une exception je peux retenter
d'executer le code qui a causé l'exception quelqu un pourrait il m eclairer
a ce sujet merci

en gros j ai un

try {
moncode
} catch (MonException ex)
{
et là je voudrais attendre un peu et retenter d executer le moncode
}

merci

5 réponses

Avatar
JKB
Le Wed, 3 Oct 2012 13:37:37 +0200,
vec écrivait :
bonjour,

Je ne comprend pas trop comment en attrapant une exception je peux retenter
d'executer le code qui a causé l'exception quelqu un pourrait il m eclairer
a ce sujet merci

en gros j ai un

try {
moncode
} catch (MonException ex)
{
et là je voudrais attendre un peu et retenter d executer le moncode
}



Je ne sais pas si j'ai tout compris, mais je ferais :

do
{
try
{
"mon code"
drapeau = 0;
}
catch(MonException ex)
{
drapeau = 1;
}
} while(drapeau);

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Avatar
vec
je vais essayer comme ça merci :)


"JKB" a écrit dans le message de news:

Le Wed, 3 Oct 2012 13:37:37 +0200,
vec écrivait :
bonjour,

Je ne comprend pas trop comment en attrapant une exception je peux
retenter
d'executer le code qui a causé l'exception quelqu un pourrait il m
eclairer
a ce sujet merci

en gros j ai un

try {
moncode
} catch (MonException ex)
{
et là je voudrais attendre un peu et retenter d executer le moncode
}



Je ne sais pas si j'ai tout compris, mais je ferais :

do
{
try
{
"mon code"
drapeau = 0;
}
catch(MonException ex)
{
drapeau = 1;
}
} while(drapeau);

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Avatar
Yliur
Le Wed, 3 Oct 2012 11:44:34 +0000 (UTC)
JKB a écrit :

Le Wed, 3 Oct 2012 13:37:37 +0200,
vec écrivait :
> bonjour,
>
> Je ne comprend pas trop comment en attrapant une exception je peux
> retenter d'executer le code qui a causé l'exception quelqu un
> pourrait il m eclairer a ce sujet merci
>
> en gros j ai un
>
> try {
> moncode
> } catch (MonException ex)
> {
> et là je voudrais attendre un peu et retenter d executer le moncode
> }

Je ne sais pas si j'ai tout compris, mais je ferais :

do
{
try
{
"mon code"
drapeau = 0;
}
catch(MonException ex)
{
drapeau = 1;
}
} while(drapeau);



Ahlala les développeurs C... ;) .
On pourrait faire avec un booléen traitementEffectue = true.

Pour attendre un peu : Thread.sleep (lève une exception si on a demandé
une interruption du fil d'exécution, qui peut être ignorée si ce
mécanisme n'est pas utilisé ou alors mener à un abandon du traitement
(plus sûr)).
Avatar
JKB
Le Wed, 3 Oct 2012 15:54:42 +0200,
Yliur écrivait :
Le Wed, 3 Oct 2012 11:44:34 +0000 (UTC)
JKB a écrit :

Le Wed, 3 Oct 2012 13:37:37 +0200,
vec écrivait :
> bonjour,
>
> Je ne comprend pas trop comment en attrapant une exception je peux
> retenter d'executer le code qui a causé l'exception quelqu un
> pourrait il m eclairer a ce sujet merci
>
> en gros j ai un
>
> try {
> moncode
> } catch (MonException ex)
> {
> et là je voudrais attendre un peu et retenter d executer le moncode
> }

Je ne sais pas si j'ai tout compris, mais je ferais :

do
{
try
{
"mon code"
drapeau = 0;
}
catch(MonException ex)
{
drapeau = 1;
}
} while(drapeau);



Ahlala les développeurs C... ;) .



Je ne voulais pas utiliser un booléen. Vue la question, je pense que
l'OP n'est pas un spécialiste.

On pourrait faire avec un booléen traitementEffectue = true.

Pour attendre un peu : Thread.sleep (lève une exception si on a demandé
une interruption du fil d'exécution, qui peut être ignorée si ce
mécanisme n'est pas utilisé ou alors mener à un abandon du traitement
(plus sûr)).



Je ne vais tout de même pas mâcher le TP, non ? ;-)

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Avatar
Samuel DEVULDER
Le 03/10/2012 13:37, vec a écrit :
bonjour,

Je ne comprend pas trop comment en attrapant une exception je peux retenter
d'executer le code qui a causé l'exception quelqu un pourrait il m eclairer
a ce sujet merci

en gros j ai un

try {
moncode
} catch (MonException ex)
{
et là je voudrais attendre un peu et retenter d executer le moncode
}



[mode: fun avec java]

Question: Faut il trapper MonException lors du 2eme re-jeu?

Si oui je vois une solution marrante, bien objet, et simple à base de
java.lang.Runnable

Runnable moncode = new Runnable() {public void run() {
int i=1;
...blabla le code quoi...
}};

try {
moncode.run();
} catch(...) {
...attente qui va bien (tout dépend de l'API)...
moncode.run();
}

Quelque part le Runnable représente ce qui se rapproche le plus d'une
closure en java. Avec lui on peut carrément réifier des bouts de code et
par exemple "factoriser" le schéma de la boucle while proposé par
ailleurs et légèrement étendu ci-après pour boucler jusqu'à un nombre
maximal de fois:

public class Retry implements Runnable {
protected int max;
protected Runnable run;

public Retry(int atmost, Runnable run) {
this.run = run;
this.max = atmost;
}

public void run() {
for(int i=max; --i>=0;) {
try {
run.run();
return; // tout est ok: sortie.
} catch(MonException ex) {
// on retrourne la dernière exception
// si toutes les tentatives ont échouées
if(i==0) throw ex;
... code spécifique de pause ...
}
}
}
}

Si tu as plusieurs bouts de codes pour lequel tu veux appliquer le
fonctionnement du type retry, plutôt que de copier/coller la structure
de code à base de for/while, tu peux faire:

new Retry(10, new Runnable() {public void run() {
... code 1 ...
}}).run();

...
...

new Retry(10, new Runnable() {public void run() {
... code 2 ...
}}).run();

L'avantage est que si tu dois changer ta routine d'attente, au lieu de
la changer partout dans le code, tu ne la changes que dans la classe Retry.

Après on peut se marrer avec le Retry, car puis qu'il lui même un
runnable on peut l'appliquer à lui même. Quizz que fait:

new Retry(2, new Retry(3, new Runnable() {...})).run();

[/mode: fun]

sam.