problème de connexion HTTP J2ME avec Threading

problème de connexion HTTP J2ME avec Threading - Java - Programmation

Marsh Posté le 24-06-2005 à 16:12:54    

Salut, je dois faire une application qui nécessite d'effectuer plusieurs connexions successives avec l'exterieur. Pour une compatibilité optimale je suis en MIDP 1.0 et je ne dispose donc que du HttpConnection.
 
Mon programme principal fabrique des requetes sous forme de byte[] et attend en réponse également des byte[]. Les requetes s'effectuent sur pression d'une commande. J'utilise l'emulateur du J2ME Wireless Toolkit 2.2 de Sun lors de l'execution, il me renvoie un warning m'indiquant que les opérations réseau ne doivent pas être effectués dans le même thread que le gestionnaire de commandes. J'ai donc créér une classe utilitaire pour transfèrer mes données:
 

Code :
  1. public final class HttpSender extends Thread implements HttpParameter {
  2. private byte[] bufferW = null;
  3. private byte[] bufferR = null;
  4. public boolean achieved = false;
  5. HttpConnection http = null;
  6. OutputStream out = null;
  7. InputStream in = null;
  8. public HttpSender(byte[] msg) {
  9.  super();
  10.  bufferW = msg;
  11. }
  12. public synchronized void run() {
  13.  if(bufferW != null) {
  14.   try {
  15.    http = (HttpConnection)Connector.open(serverURL, Connector.READ_WRITE);
  16.    http.setRequestMethod(HttpConnection.POST);
  17.    out = http.openOutputStream();
  18.    in = http.openInputStream();
  19.    out.write(bufferW);
  20.    bufferR = new byte[in.available()];
  21.    in.read(bufferR);
  22.   } catch(Exception exc) {
  23.    //display error
  24.    exc.printStackTrace();
  25.   } finally {
  26.    try {
  27.     in.close();
  28.    } catch(Exception exc) {}
  29.    try {
  30.     out.close();
  31.    } catch(Exception exc) {}
  32.    try {
  33.     http.close();
  34.    } catch(Exception exc) {}
  35.   }
  36.  }
  37.  achieved = true;System.out.println("ok" );
  38.  notifyAll();
  39. }
  40. public synchronized byte[] getResponse() throws Exception {
  41.  while(!achieved) {
  42.   try {
  43.    wait();
  44.   } catch(Exception exc) {
  45.    exc.printStackTrace();
  46.   }
  47.  }
  48.  return(bufferR);
  49. }


 
Mon problème est qu'avec ce code, je reste bloqué sur le panneau d'autorisation d'utiliser le réseau. N'étant pas vraiment le roi de la programmation multithread, je ne vois pas ce qui cause mon erreur.
 
Je tiens à préciser que si je n'effectue pas une synchronisation entre mes threads, lorsque je lis la réponse, la methode run n'est pas encore achevée et bufferR est null.
 
Quelqu'un saurait t'il ce qui ne vas pas dans mon code ou aurait un bon tuto ?
 
[ps: j'arrive à faire des tests de base concluant avec mon servlet, ex: le tuto de sun sur MIDP. Mon prog reste planté sur le Connector.open(...)]

Reply

Marsh Posté le 24-06-2005 à 16:12:54   

Reply

Sujets relatifs:

Leave a Replay

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