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
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
vec
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
"JKB"
JKB
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)).
Yliur
Je ne voulais pas utiliser un booléen. Vue la question, je pense que
l'OP n'est pas un spécialiste.
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
[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.