Bonjour,
J'ai implémenter une MIDlet qui permet de discuter avec un application serveur également en Java. Mon problème est le suivant : Lorsque j'envoie des données, je démarre un Timer que j'arrete quand j'ai recue l'acquittement du serveur. Si je ne reçoit rien, le timer déclenche un timeout au bout de 10 secondes. C'est ici que survient le problème. Lorsque mon timer est déclenché, il me fait une exception Out Of Memory.
Voici mes deux class :
Server.java qui permet de communiquer avec le serveur
Timer.java le timer lui même
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71 package projet.wrk; import projet.cste.Constantes; import projet.ctrl.Ctrl; /** * <p>Titre : WorkerNetwork</p> * * <p>Description : Worker qui permet de lancer le server et le timer </p> * * <p>Copyright : Copyright (c) 2005</p> * * <p>Société : EMF</p> * * @author Clément Valentin * @version 1.0 */ public class WorkerNetwork implements Constantes{ //Constructeur de WorkerNetwork public WorkerNetwork(Ctrl ctrl){ this.ctrl = ctrl; } //Démarrage du timer et demande de connexion public void connect(String url, String msg){ server = new Server(this.ctrl); server.startServer(url, msg); } //Méthode qui permet d'envoyer des données public void sendCmd(String cmd){ time = new Timer(10000, this.ctrl); time.startTimer(); server.sendCmd(cmd); } //Méthode qui permet de recevoir les données public String receiveData(){ String data = server.receiveData(); time.stop(); return data; } //Ferme la connexion et réinitialise le métier server public void releaseConn(){ server.releaseConn(); server = new Server(this.ctrl); } public void initThread(){ server = new Server(this.ctrl); } /** * @directed */ private Ctrl ctrl; /** * @directed */ private Timer time; /** * @directed */ private Server server; }
La méthode timeout appel le contrôleur qui lui appel l'ihm afin de faire cette action
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84 package projet.wrk; import projet.ctrl.Ctrl; /** * <p>Titre : Timer.java</p> * * <p>Description : Timer qui permet de faire sortir l'application serveur ne répond pas</p> * * <p>Copyright : Copyright (c) 2005</p> * * <p>Société : EMF</p> * * @author Clément Valentin * @version 1.0 */ public class Timer extends Thread{ //Constructeur de Timer. Initialisation des variables du Timer public Timer(int length, Ctrl ctrl){ this.ctrl = ctrl; timeout = length; timeelapsed = 0; } //Mise à zéro du Timer public void reset(){ synchronized (this){ timeelapsed = 0; } } //Démarre le Timer public void startTimer(){ running = true; this.start(); } /* * le timer tourne en boucle jusqu'à l'interruption ou le déclenchement du timeout */ public void run(){ while (running){ try{ Thread.sleep(rate); } catch (InterruptedException ioe){ continue; } synchronized (this){ timeelapsed += rate; if (timeelapsed > timeout){ running = false; timeout(); } } } } //Initialise la variable running à true public void running(){ running = true; } //Action effectuer lors du déclenchement du timeout public void timeout(){ ctrl.timeout(); } //Arret tu timer public void stop(){ running = false; } private boolean running = true; private long timeout; private long timeelapsed; protected long rate = 100; /** * @directed */ private Ctrl ctrl; }
Si quelqu'un a une idée c'est avec plaisir que je la prend
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public void displayMsg(String msg){ Alert alert = new Alert("Erreur", msg, null, AlertType.ERROR); alert.setTimeout(TIME_FOR_ALERT); display.setCurrent(alert); }
Merci d'avance
Partager