0

昨日、入力ストリームの読み取りに関する問題について質問を投稿し、助けられました。

私も同様の状況に陥っていますが、今回は正しいことをしていることはわかっていますが、うまくいきません。

入力ストリームから読み取っていますが、異なる値が得られます。送信するデータをどのように変更しても、値として同じ文字列 (「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

だから私はその理由を見つけるために文字列に変更し、見よ、何を送信してもその文字列を取得します。入力ストリームで文字列が固定され、何も送信されないようなものです。何が起こっているのかわかりません。

助けが必要

4

1 に答える 1

0

これは非常に紛らわしい質問です。どのプロセスがどのデータを書き込んでいるか、どのように送信されているか、どのプロセスがそれを取得しているかはわかりません。ここには関連するコードがいくつかありますが、ストーリーを語るには十分ではありませんでした。どのようにしdataFromCrossing1てその値を取得しましたか?

部外者に質問できるように問題を整理するとよいと思います。おそらくその過程で、自分で解決策に出くわす可能性があります。

原則として、プログラムで文字列定数を変更しているにもかかわらず、同じ出力が引き続き表示される場合、何が起こっているのかということです。

  • 元のプログラムはまだ実行中です。また
  • 元のバージョン以降のすべてのバージョンでエラーが発生したため、一度正常にコンパイルしたクラス ファイルが何度も実行されています。また
  • 実行していると思っているプログラムを実際に実行しているわけではありません。
于 2010-07-29T14:48:04.860 に答える