Passage de variables entre méthode imbriquées - Java - Programmation
Marsh Posté le 10-10-2015 à 01:36:05
Tu dois déclarer ta variable pos en final et c'est une règle du java
Any local variable, formal parameter, or exception parameter used but not declared in an inner class must be declared final |
Code :
|
En gros comme tu utilises une classe anonyme ton compilateur va devoir créer une copie de ta variable pour qu'elle soit visible, et pour s'assurer que la copie est identique tu dois déclarer la variable final.
EDIT : si tu veux pousser le truc, regarde le 2ième post http://stackoverflow.com/questions [...] mous-class
Marsh Posté le 10-10-2015 à 09:08:40
Bonjour,
Merci de ta réponse, mais du coup ma variable pos n'est plus une variable mais devient une constante.
Et j'ai un message d'erreur (Cannot assign a value to final variable pos) lorsque je veux l'incrémenter avec mon os++;
Bref ça coince encore...
Dans mon cas, l'idéal serait d'avoir un Timer qui ne fait pas appel à des sous méthodes.
Merci encore
Marsh Posté le 19-10-2015 à 15:48:10
J'arrive 9 jours plus tard et t'es peut-être passé à autre chose, mais tu peux par exemple déclarer ta variable pos dans ton inner class ainsi que l'appel au timer.cancel() (et tu passes la déclaration du timer avec final bien sûr).
Pas vraiment de raison de les sortir de l'inner class vu que t'en as besoin que là.
Marsh Posté le 09-10-2015 à 23:54:35
Bonsoir,
Je cherche à réaliser un petit jeu en JAVA avec Android Studio. Je connais d'autres languages de programmation DELPHI, Visual Basic, mais je débute en JAVA... Grrr c'est dur, dur...
J'ai réussi déjà à utiliser des boutons, faire afficher des sprites avec des évènements sonores... Début prometteur mais je bloque complètement sur un timer. J'ai besoin à chaque impulsion du timer de faire afficher des sprites à l'écran. Donc j'ai besoin de faire passer des variables (sprites visible, position, etc...)
Voici un bout de code :
public void managerOfTime(int delay) {
int pos;
pos=1;
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
// task to be done every 1000 milliseconds
managerOfSound(hd);
managerOfOeufs(3,pos);
pos++;
}
});
}
}, 0, delay);
if (pos==5) {
timer.cancel();
}
}
J'ai ma variable pos qui reste souligné en rouge dans le code (2 endroits en gras ci-dessus), si je passe ma souris dessus, j'ai un message :
Variable 'pos' is accessed from within inner class, needs to be declared final
Bref que faire ??? Est-ce que c'est ces methodes imbriquées qui posent problèmes ? Comment faire pour déclarer cette variable ? Si vous avez une autre solution de timer plus simple, je suis preneur
Merci d'avance pour votre aide