Variable de type final [Résolu]

Signaler
Messages postés
10
Date d'inscription
mardi 10 mars 2009
Statut
Membre
Dernière intervention
21 avril 2009
-
Messages postés
10
Date d'inscription
mardi 10 mars 2009
Statut
Membre
Dernière intervention
21 avril 2009
-
Bonjour,

j'ai une fonction qui implemente mouselistener et je suis en train
d'avoir les coordonnees de la souris à chaque fois que je la déplace.
Je veux envoyer ces coordonnees à un web service mais je veux envoyer
une seule coordonnées chaque les 2 secondes. Mais à l'insctruction: port.afficher(e.getX(),e.getY()); le compilateur m'exige de mette la variable e comme final, mais moi je veux pas qu'elle soit final car je veux qu'elle change à chaque fois je déplace la souris.

Merci de m'aider.

Voici mon code:

void eventOutput(String eventDescription, MouseEvent e) {

Timer timer=new Timer();

timer.schedule(new TimerTask(){

public void run(){

try { // Call Web Service Operation

sendmouseevent.SendMouseEventService service = new sendmouseevent.SendMouseEventService();

sendmouseevent.SendMouseEvent port = service.getSendMouseEventPort();

port.afficher(e.getX(),e.getY());

} catch (Exception ex) {

}}},0,2000);

}


Merci bien

Cordialement

6 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
120
Ben si je comprends bien ton code, tu déclenche le timer à chaque mouvement de la souris (il doit planter à un moment donné non ?).
Le but est de créer le Timer une fois pour toute et de ne stocker que les X et Y de ta souris dans une variable membre de classe.

Ca doit donner un truc du genre (de tête, je te laisse corriger ce qui ne compile pas) :


class Test implements MouseEventListener {

public static final Integer MOUSE_NOT_MOVED = -1;

protected Integer mouseX;
protected Integer mouseY;

public Test() {
mouseX = MOUSE_NOT_MOVED;
mouseY = MOUSE_NOT_MOVED;

Timer timer=new Timer();
timer.schedule(new TimerTask(){
public void run(){
if (mouseX != MOUSE_NOT_MOVED) {
try { // Call Web Service Operation
sendmouseevent.SendMouseEventService service = new sendmouseevent.SendMouseEventService();
sendmouseevent.SendMouseEvent port = service.getSendMouseEventPort();
port.afficher(mouseX, mouseY);
mouseX = MOUSE_NOT_MOVED;
mouseY = MOUSE_NOT_MOVED;
} catch (Exception ex) {
ex.printStackStrace();
}
}
}
,0,2000);
}


public void MouseMoved(MouseEvent e) {
mouseX = e.getX();
mouseY = e.getY();
}
}

Ainsi, l'événement se déclenche toutes les 2000 ms, n'envoie que la dernière position connue, et n'envoie rien si la souris n'a pas bougée (petite optimisation).
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
120
Salut,

Cela ne veux pas dire qu'elle ne sera plus jamais modifié à chaque appel à la fonction : cela veut dire que toi, dans le corps de la fonction, tu ne pourras plus la modifier, c'est bien différent !
Messages postés
10
Date d'inscription
mardi 10 mars 2009
Statut
Membre
Dernière intervention
21 avril 2009

Merci bien de me répondre.

Merci, oui j'ai essayé ce que vous avez dit et j'ai trouvé qu'elle se modifit à chaque appel.
Mais le seul probléme qui reste c'est que meme si je ne suis pas en train de déplacer la souris l'envoi des coordonnees se répéte dans une boucle tous les 2 secondes. Mais moi je veux que le programme envoi seulement la derniére position et non plus tous les coordonnées précédents en boucle.

Merci d'avance.
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
120
Pour cela, il te faut un timer qui se déclenche toutes les 2 secondes, et dont le but est d'envoyer la valeur d'une variable remplie par ton evénéments à chaque mouvement de souris, ainsi il n'enverra que la dernière position connue.
Messages postés
10
Date d'inscription
mardi 10 mars 2009
Statut
Membre
Dernière intervention
21 avril 2009

Oui ça ce que je veux. Mais je pense que je suis en train de le faire avec le code cité au dessus
je suis en train de prendre la position avec e.getX() et e.getY(), si non est ce que vous pouvez me signaler comment.
Merci
Messages postés
10
Date d'inscription
mardi 10 mars 2009
Statut
Membre
Dernière intervention
21 avril 2009

Merci merci bien, ça marche bien.
Vous m'avez sauvé la journée.
Vraiment je suis fier d'être un membre de ce forum.
Cordialement.