2010-07-29 78 views
0

昨天我发布了一个关于输入流阅读问题的问题,并且我得到了帮助。需要再次帮助从输入流中读取数据

我发现自己处于类似的情况,但这次我知道我做的是正确的事情,但它不适合我。

我正在阅读输入流,但我得到不同的价值。不管我如何改变我发送的数据,我都会得到与该值相同的字符串(“to叉车-42”)。起初,我用“toForklift-”发送的值加上前缀,但我已将该字符串更改为不同的字符串,但是我在括号中得到相同的字符串。我甚至将数字42更改为不同的数字,但是当我运行程序时,我在控制台中得到相同的字符串。以下是发送的内容:如

发送和接收的两个类。

正在使用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个小时,但找不到原因。我不明白,无论我发送什么,我都会收到“叉车-42”。

起初,我试图发送42与writeInt()方法,但随后在读取器类身边,我使用的readInt(),但我得到出头,如:

745687894 
459877455 
456987456 

所以我改变的字符串找出原因,然后看,无论我发送什么,我都会得到那个字符串。就好像该字符串在输入流中是固定的,并且不发送任何内容。我不知道发生了什么。

需要帮助

+0

目前,我不知道你的应用程序将从哪里得到字符串“toForklift-”。并且你定义的int变量(int value = 42;)根本不被使用。您发送的唯一字符串是*“ggggggggg”+ 455 +“\ n”*,我强烈希望能够收到。 – f1sh 2010-07-29 14:32:20

+0

我也是,但我没有收到该字符串。现在很奇怪。我故意将42改为455,看它是否会起作用,但事实并非如此。感谢您的回复。 – 2010-07-29 14:38:08

+1

该字符串,特别是“叉车”这个词,不能出现在任何地方......搜索您的整个项目。NXT框架(我从未使用过)将其写入流中,或者您的应用在代码中的某处执行。 – f1sh 2010-07-29 14:48:16

回答

0

这是一个很混乱的问题。我们真的不知道哪个过程正在写入哪些数据,以及如何传输,以及哪个过程正在进行传输。这里有一些相关的代码,但我看不到足够的故事。 dataFromCrossing1如何获得它的价值?

我认为这样做可以很好地组织您的问题,以便您可以向外部人询问相关问题。可能在这样做的过程中,您可能会自己绊倒解决方案。

原则上,如果你改变你的程序字符串常量但你仍然看到相同的输出,然后发生的事情是,

  • 原来的程序仍在运行;或
  • 原以来的所有版本都有错误,所以您曾经成功编译过的类文件一次又一次地运行;或
  • 你并没有真正运行你认为你正在运行的程序。
+1

它从这个方法得到它的值:readLineFromCrossing() – 2010-07-29 14:54:59

+1

是的,bu在哪个方法?描述赋值的代码行不在任何方法或初始值设定项中。您复制/粘贴您的代码以使其无法读取。 – f1sh 2010-07-29 15:03:50