我有一个机器人和一个在 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