Я был бы очень признателен, если кто-то может мне точку в правильном направленииСерийный Event Data Слушатель Java
Как бы я идти о вызывая событие, которое вызывается, когда никакие данные не получены из последовательного примера связи ниже?
Thank you, Maria.
public void connect(String portName) throws Exception {
CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName);
if (portIdentifier.isCurrentlyOwned()) {
System.out.println("Error: Port is currently in use");
} else {
CommPort commPort = portIdentifier.open(this.getClass().getName(),
2000);
if (commPort instanceof SerialPort) {
SerialPort serialPort = (SerialPort) commPort;
serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8,
SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
InputStream in = serialPort.getInputStream();
OutputStream out = serialPort.getOutputStream();
theSerialWriter = new SerialWriter(this, out);
new Thread(theSerialWriter).start();
serialPort.addEventListener(new SerialReader(this, in));
serialPort.notifyOnDataAvailable(true);
} else {
System.out.println("Error: Only serial ports are handled by this example.");
}
}
}
public void serialEvent(SerialPortEvent arg0) {
int data;
// boolean setFlagDoorLock = false ;
// if(arg0= 1){}
try {
int len = 0;
while ((data = in.read()) > -1) {
if (data == '\n') {
break;
}
buffer[len++] = (byte) data;
asHexStr = DatatypeConverter.printHexBinary(buffer);
if (asHexStr.contains("FB1")) {
// Thread.sleep(1000);
ActivateSystem = true;
if ((asHexStr.contains("FB1") && (ActivateSystem == true))) {
ActivateSystem = false;
asHexStr = "";
} else {
System.out.println("Here2");
}
}
}
} catch (IOException e) {
e.printStackTrace();
System.exit(-1);
}
System.out.println("Received");
}
}
public static class SerialWriter implements Runnable {
OutputStream out;
SerialPortConnector main = null;
public SerialWriter(SerialPortConnector twoWaySerialComm,
OutputStream out) {
main = twoWaySerialComm;
this.out = out;
}
public void send(String stringToSend) {
try {
int intToSend = Integer.parseInt(stringToSend);
this.out.write(intToSend);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void run() {
try {
int c = 0;
Thread.sleep(1000);
if (asHexStr == "") {
System.out.println("Here");
// ActivateSystem = false;
}
}
// catch (IOException e)
catch (Exception e) {
e.printStackTrace();
System.exit(-1);
}
}
}
public static void main(String[] args) {
try {
(new SerialPortConnector()).connect("COM12");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Пожалуйста, не переустанавливайте свой вопрос так, как вы это делали раньше: [Слушатель событий Java Serial Communication] (http://stackoverflow.com/questions/21638625/java-serial-communication-event-listener). Люди действительно хотят помочь вам, но это очень сложно (или невозможно), учитывая плохое описание вашей проблемы. * Мне нужно место для добавления вызова (или распечатки) ниже, которое вызывается только тогда, когда данные не читаются или не пусты? * 1) Если данных нет, то серийное событие не будет запущено. 2) Вы уверены, что устройство, с которым вы пытаетесь установить связь, - это удаление чистых данных? 3) Вы уверены, что серийное событие - правильный подход? – dic19
Привет, Прежде всего, спасибо за ваш ответ, извините за повторную публикацию, как и все здесь. Я полагаю, что я просто отчаянно нуждался в ответе. Вы правы. Что я ищу - это событие, которое будет запущено, если нет данные считываются из серийного номера и как именно это можно сделать. – kelevra88
Добро пожаловать и не беспокойтесь, мы постараемся помочь. Еще один вопрос, как устройство взаимодействует с последовательным портом? Я имею в виду, он все время отправляет данные или вам нужно отправлять команды на это устройство, а затем он отправит ответ? Эта информация полезна для определения наилучшего подхода. – dic19