У меня есть робот и приложение с графическим интерфейсом, работающие на графическом интерфейсе. У меня есть цикл while на стороне робота, который постоянно отправляет данные в графический интерфейс.
Перед отправкой значения я сначала отправляю значение, которое GUI будет использовать, чтобы определить, сколько последовательных значений он должен прочитать впоследствии, например, я отправляю что-то вроде;
dataout.writeInt(2);
dataout.writeInt(50);
dataout.writeInt(506);
dataout.writeInt(50);
dataout.flush
Здесь GUI читает 2, а затем в случае 2 будет читать следующие два целых числа.
На стороне GUI у меня есть цикл while, который выполняется () в потоке, который непрерывно читает поток ввода.
Внутри цикла в графическом интерфейсе у меня есть инструкция переключения регистра.
Пример
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