1

我有一个机器人和一个在 GUI 上运行的 GUI 应用程序。我在机器人端有一个 while 循环,它不断向 GUI 发送数据。

在我发送一个值之前,我首先发送一个值,GUI 将使用该值来确定它必须在之后读取多少个连续值,例如我发送类似的东西;

dataout.writeInt(2);
dataout.writeInt(50);
dataout.writeInt(506);
dataout.writeInt(50);
dataout.flush 

这里 GUI 读取 2,然后在情况 2 下,它将读取接下来的两个整数。

在 GUI 方面,我有 i while 循环,该循环位于从输入流连续读取的线程的 run() 中。

在 GUI 的循环内,我有一个 switch case 语句。

例子

while(true){
int val = dataIn.readIn()

switch(val){

    case 1:
            int color = readInt();
      break;

case 2:
         int me= readInt();
         int you= readInt();
      break;

case 3:
         int megg = readInt();
         int youss = readInt();
          int mes = readInt();
         int youe = readInt();
      break;

}

} 

t 没有按我的意愿工作。这就是我得到的:

在它读取第一个 int 后,我​​得到一系列从输入流中读取的数字。我不知道这些数字是从哪里来的。

我认为如果它无法读取我发送的数字,那么它必须阻止,但事实并非如此。

对于上面的示例,这就是我得到的:

2
1761635840
1946182912
1845523456
1761636096
1845523200
1006658048
16274152968 

2之后的所有数字,我不知道它们来自哪里。它不读取我发送的 2 之后的数字。

我试图插入一些 Thread.sleep(1000) 但不工作。

我究竟做错了什么?需要帮忙

代码

//This code on the robot


public class ForkliftColorSensorReader implements Runnable{

 DataOutputStream outputStream;
    ColorSensor colorSensor;


public ForkliftColorSensorReader(ColorSensor colorSensor, DataOutputStream outputStream) {

        this.outputStream = outputStream;
        this.colorSensor = colorSensor;
}


  public void run() {
        int code = 1;

        while (code == 1){

     try {
        Thread.sleep(1000);
    outputStream.writeInt(10);
    outputStream.flush();
    outputStream.writeInt(2);
    outputStream.flush();
    } catch (Exception e) {

                                }         
                 }



     try {
        Thread.sleep(1000);
    outputStream.writeInt(20);
    outputStream.flush();
    outputStream.writeInt(4);
    outputStream.flush();
    } catch (Exception e) {

                                }         
                 }

  }

}



//This code on the GUI

public class Receive  implements Runnable{


int num = this.dataIn.readInt();

public void run(){
switch(num){
    case 10:

    int color = this.dataIn.read();

    break;


    case 20:

    int c = this.dataIn.read();

    break;


default;


}

}

}


// I am using NXTConnector from the GUI to make the connection to the robot. 
//I then use the DataOutputstream from the connection to read the data
4

1 回答 1

1

文字intentions<b对你有什么意义吗?您正在从输入流中读取它;这就是这些数字在某个字符集中对应的内容。我的猜测是你有一些 HTML 写入你的输出流。您确定您只写入 DataOutputStream 而不是同时写入底层 OutputStream 吗?另外,这真的是您阅读的代码的样子吗?如果是这样,readInt() 方法是如何定义的?

编辑:用于解决上述问题的片段。

int input = 184549376 ;
byte[] bytes = { (byte)(input >> 24), (byte)(input >> 16),
        (byte)(input >> 8), (byte)(input) };
System.out.printf("int: %d hex: %08X string: %s",
        input, input, new String(bytes));

编辑#2:在你的代码中,你用写writeInt()和读read()正是我所说的那种非对称性。您必须使用readInt()来读取用 编写的字段writeInt()InputStream.read(),您正在使用什么,读取一个字节的数据并将其存储在一个 int 中。不是你想要的。

于 2010-07-28T13:39:41.300 回答