2010-07-29 2 views
0

Hier, j'ai posté une question sur un problème que j'avais concernant la lecture des entrées et j'ai été aidé.Besoin d'aide à nouveau Lire les données de Inputstream

Je me retrouve dans une situation similaire mais cette fois je sais que je fais la bonne chose mais ça ne marche pas pour moi. Je lis d'un inputtream mais j'obtiens la valeur différente. Peu importe comment je change les données que j'envoie, je reçois la même chaîne ("toForklift-42") que la valeur. Au début, je préfixer la valeur que j'envoie avec "toForklift-" mais j'ai changé cette chaîne pour différentes chaînes mais j'ai la même chaîne dans la parenthèse. J'ai même changé le nombre 42 à un nombre différent mais pourtant quand j'exécute le programme, j'obtiens la même chaîne dans la console. Voici ce que j'envoie: comme

Deux classes pour l'envoi et la réception. Améliorez la connexion avec le leJOS NXJ NXTConnector et ouvrez les flux.

// sender class 

class PanButton implements Runnable { 

    DataInputStream dis; 
    DataOutputStream dos; 
    TouchSensor touch = new TouchSensor(SensorPort.S4); 





    PanicButtonCrossing(DataInputStream is, DataOutputStream os) { 
    dos = os; 
    dis = is; 
    } 

    public void run() { 

     while (!touch.isPressed()) {} 

      // If you get a message: KILL EVERYTHING  
      Motor.A.stop(); 
      Motor.B.stop(); 
      Motor.C.stop(); 

      try { // send 42 
       int value = 42; 

       dos.writeChars("ggggggggg" + 455 + "\n"); 
       dos.flush(); 
       Sound.systemSound(true, 3); 
      } catch (IOException ioe) { 
       LCD.drawString("Write Exception", 0, 0); 
      } 

      System.exit(1); 


} 






// Reader classs 



public class InputReaderCrossing implements Runnable{ 


     private DataInputStream dataIn; 
     private DataOutputStream dataOut; 

public InputReaderCrossing(DataInputStream dataIn, DataOutputStream dataOut) { 
      this.dataIn = dataIn; 
      this.dataOut = dataOut; 
      this.sensor = sensor; 
      this.readLock = new Object(); 

     } 


public void run(){ 

while(true){ 

String dataFromCrossing1 = readLineFromCrossing(); 
System.out.println("CROSSING VALUE: " + dataFromCrossing1 + " :VALUEEEEE"); 
} 

} 

private String readLineFromCrossing() throws IOException{ 
       StringBuffer sb = new StringBuffer(); 

       synchronized(readLock){ 
       while(true) { 
        char c = this.dataIn.readChar(); 
        if (c == '\n') break; 
        sb.append(c); 
       } 
       return sb.toString(); 
       } 
      } 


} 

J'ai besoin de votre aide s'il vous plaît. J'ai passé 6 heures mais je ne trouve pas la raison. Je ne comprends pas, peu importe ce que j'envoie, je reçois "toForklift-42".

Au début, j'ai essayé d'envoyer 42 avec le writeInt() méthodes mais sur le côté classe de lecteur j'utilise readInt() mais je me somethings comme:

745687894 
459877455 
456987456 

donc j'ai changé à la chaîne de Découvrez pourquoi et voici, je reçois cette chaîne, peu importe ce que j'envoie. C'est comme si cette chaîne était fixée dans le flux d'entrée et que rien n'était envoyé. Je ne sais pas ce qui se passe.

Besoin d'aide

+0

Actuellement, je n'ai aucune idée d'où votre application obtiendrait la chaîne "toForklift-". Et la variable int que vous avez définie (int value = 42;) n'est pas utilisée du tout. La seule chaîne que vous envoyez est * "ggggggggg" + 455 + "\ n" *, je m'attendrais fortement à être reçu. – f1sh

+0

Moi aussi mais je ne reçois pas cette chaîne. C'est très étrange maintenant. J'ai intentionnellement changé le 42 à 455 pour voir si cela fonctionnera mais ce n'est pas le cas. Merci pour votre réponse. –

+1

Cette chaîne, en particulier le mot "Forklift", ne peut apparaître de nulle part ... Recherchez votre projet entier pour cela.Soit le framework NXT (que je n'ai jamais utilisé) l'écrit dans le flux, soit votre application le fait à un moment donné dans le code. – f1sh

Répondre

0

Ceci est une question très déroutante. Nous ne savons pas vraiment quel processus écrit quelles données, comment il est transmis et quel processus le récupère. Il y a un code pertinent à voir ici, mais je n'ai pas vu assez pour raconter l'histoire. Comment est-ce que dataFromCrossing1 a eu sa valeur?

Je pense qu'il serait bon d'organiser votre problème de telle sorte que vous puissiez poser une question à un étranger. Peut-être en train de le faire, vous pourriez tomber sur la solution vous-même.

En principe, si vous changez encore les constantes de chaîne dans votre programme vous continuez à voir la même sortie, alors ce qui se passe est que

  • Le programme original est toujours en cours; ou
  • toutes les versions depuis l'origine ont eu des erreurs, donc les fichiers de classe que vous avez compilés avec succès sont en cours d'exécution encore et encore; ou
  • vous n'utilisez pas vraiment le programme que vous pensez exécuter.
+1

Il tire sa valeur de cette méthode: readLineFromCrossing() –

+1

Oui, dans quelle méthode? La ligne de code qui décrit l'affectation ne figure dans aucune méthode ou initialiseur. Vous copiez/collez votre code pour le rendre illisible. – f1sh

Questions connexes