2010-07-29 54 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