昨日、入力ストリームの読み取りに関する問題について質問を投稿し、助けられました。
私も同様の状況に陥っていますが、今回は正しいことをしていることはわかっていますが、うまくいきません。
入力ストリームから読み取っていますが、異なる値が得られます。送信するデータをどのように変更しても、値として同じ文字列 (「toForklift-42」) が返されます。最初に、送信する値の前に「toForklift-」を付けますが、その文字列を別の文字列に変更しましたが、括弧内に同じ文字列が表示されます。番号 42 を別の番号に変更しても、プログラムを実行すると、コンソールに同じ文字列が表示されます。以下は送信しているものです:as
送信用と受信用の 2 つのクラス。
leJOS NXJ NXTConnector を使用して接続を確立し、ストリームを開きます。
// 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();
}
}
}
あなたの助けが必要です。私は6時間を費やしましたが、理由が見つかりません。何を送っても「toForklift-42」と出てくるのでわかりません。
最初は writeInt() メソッドで 42 を送信しようとしましたが、リーダー クラス側で readInt() を使用しましたが、次のような結果が得られました。
745687894
459877455
456987456
だから私はその理由を見つけるために文字列に変更し、見よ、何を送信してもその文字列を取得します。入力ストリームで文字列が固定され、何も送信されないようなものです。何が起こっているのかわかりません。
助けが必要