IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java ME Discussion :

Problème de Timeout


Sujet :

Java ME

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 21
    Par défaut Problème de Timeout
    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

    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;
    
    }
    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
    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;
    }
    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
     
       public void displayMsg(String msg){
          Alert alert = new Alert("Erreur", msg, null, AlertType.ERROR);
          alert.setTimeout(TIME_FOR_ALERT);
          display.setCurrent(alert);
       }
    Si quelqu'un a une idée c'est avec plaisir que je la prend

    Merci d'avance

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 21
    Par défaut
    J'ai trouver personnellement une réponse à ma question. Pour ceux à qui sa interesse la voici :

    J'appel cette méthode et si elle me rend true alors je lit mon inputstream sinon j'affiche un message d'erreur.
    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
     
      public boolean readyToRead(InputStream is, int timeout) {
            while (true) {
                try {
                    while (!(is.available() > 0) && timeout > 0) {
                        Thread.sleep(100);
                        timeout -= 100;
                    }
                    if (is.available() == 0) {
                        System.out.println(is.available());
                        return false;
                    } else {
                        System.out.println(is.available());
                        return true;
                    }
                } catch (Exception e) {
                }
            }
        }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [TOMCAT] Problème de timeout d'une servlet
    Par tuxor dans le forum Tomcat et TomEE
    Réponses: 5
    Dernier message: 18/09/2007, 12h04
  2. Problème de timeout
    Par Mateache dans le forum ASP
    Réponses: 32
    Dernier message: 17/01/2006, 16h23
  3. FTP (TIdFTP) : problème de TimeOut
    Par michelci dans le forum Web & réseau
    Réponses: 7
    Dernier message: 26/10/2005, 17h24
  4. Problème de timeout idTcpClient
    Par Phébus dans le forum Web & réseau
    Réponses: 7
    Dernier message: 22/08/2005, 16h12
  5. Problème de timeout et de déconnexion cliente
    Par Aurelien92 dans le forum CORBA
    Réponses: 18
    Dernier message: 24/08/2004, 14h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo