Passage de variables entre méthode imbriquées

Passage de variables entre méthode imbriquées - Java - Programmation

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  :jap:  
 
 

Reply

Marsh Posté le 09-10-2015 à 23:54:35   

Reply

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 :
  1. final int pos;


 
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


Message édité par caps lock le 10-10-2015 à 01:37:27
Reply

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 :pos++;
 
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
 
 :hello:

Reply

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à.


---------------
Are we human or are we (dance)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed