Variable de type final

Résolu
patriospatrios Messages postés 10 Date d'inscription mardi 10 mars 2009 Statut Membre Dernière intervention 21 avril 2009 - 21 avril 2009 à 15:48
patriospatrios Messages postés 10 Date d'inscription mardi 10 mars 2009 Statut Membre Dernière intervention 21 avril 2009 - 21 avril 2009 à 18:24
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

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
21 avril 2009 à 17:11
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).
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
21 avril 2009 à 15:55
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 !
0
patriospatrios Messages postés 10 Date d'inscription mardi 10 mars 2009 Statut Membre Dernière intervention 21 avril 2009
21 avril 2009 à 16:28
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.
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
21 avril 2009 à 16:39
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
patriospatrios Messages postés 10 Date d'inscription mardi 10 mars 2009 Statut Membre Dernière intervention 21 avril 2009
21 avril 2009 à 16:49
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
0
patriospatrios Messages postés 10 Date d'inscription mardi 10 mars 2009 Statut Membre Dernière intervention 21 avril 2009
21 avril 2009 à 18:24
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.
0
Rejoignez-nous