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
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
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. –
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