retenter d'executer du code dans une exception

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
JKB
Le #24834702
Le Wed, 3 Oct 2012 13:37:37 +0200,
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
}



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
vec
Le #24834862
je vais essayer comme ça merci :)


"JKB"
Le Wed, 3 Oct 2012 13:37:37 +0200,
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
}



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
Yliur
Le #24834982
Le Wed, 3 Oct 2012 11:44:34 +0000 (UTC)
JKB
Le Wed, 3 Oct 2012 13:37:37 +0200,
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
> }

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)).
JKB
Le #24835092
Le Wed, 3 Oct 2012 15:54:42 +0200,
Yliur
Le Wed, 3 Oct 2012 11:44:34 +0000 (UTC)
JKB
Le Wed, 3 Oct 2012 13:37:37 +0200,
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
> }

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
Samuel DEVULDER
Le #24836292
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.
Publicité
Poster une réponse
Anonyme