Я следующий Java-код:Закрыть проблема последовательного порта в Java
import java.io.*;
import java.util.ArrayList;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
public class SerialCommDataReading implements SerialPortEventListener {
private static SerialPort serialPort;
private static final String PORT_NAME = "COM5";
private BufferedReader input;
private static final int TIME_OUT = 2000;
private static final int DATA_RATE = 9600;
public void initialize() {
CommPortIdentifier portId = null;
try {
portId = CommPortIdentifier.getPortIdentifier(PORT_NAME);
serialPort = (SerialPort) portId.open("GestureData", TIME_OUT);
serialPort.setSerialPortParams(DATA_RATE,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
input = new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
System.out.println(input.read());
serialPort.addEventListener(this);
serialPort.notifyOnDataAvailable(true);
} catch (Exception e) {
System.err.println(e.toString());
}
}
public synchronized void serialEvent(SerialPortEvent oEvent) {
if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
try {
String inputLine = input.readLine();
System.out.println(inputLine);
} catch (Exception e) {
System.err.println(e.toString());
}
}
}
public static void main(String[] args) throws Exception {
SerialCommDataReading main = new SerialCommDataReading();
main.initialize();
Thread t = new Thread() {
public void run() {
try {
Thread.sleep(1000000);
} catch (InterruptedException ie) {
}
}
};
t.start();
System.out.println("Started");
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
serialPort.close();
serialPort.removeEventListener();
System.out.println("Stopping");
}
});
}
}
код работает прекрасные Извлечение данных из последовательного порта.
Проблема/вопрос: когда я прекратил использовать код. Предполагается запустить serialPort.close(); и serialPort.removeEventListener(), и сообщение «Stopping» появляется в консоли. Но когда я начинаю код снова говорит
gnu.io.NoSuchPortException
Так логически я ожидаю, что порт будет свернут, поэтому я могу перезагрузить код снова из перезапуска моего аппаратного устройства, любая идеи, что я отсутствую или делает неправильно?
Информация: Я использую Windows 8.1 64bit/связь основана на bluetooth, она эмулируется как последовательный порт с COM5.
Примечание: код изначально здесь http://playground.arduino.cc/interfacing/java меня изменить его
Вы работаете на окне ОС? –
, а последовательный порт не является родным последовательным портом - это USB-устройство, которое эмулирует последовательные порты ?! –
У меня было много проблем с моими эмулированными устройствами USB на ПК с Windows ... вы должны посмотреть в свою конфигурацию системы поиск там для вашего последовательного порта. они перечислены ... Моя проблема заключалась в том, что, как только я закрыл последовательный порт, он больше не был доступен, и я включил его в другой слот для USB. порт, который я использовал первым (например, COM5), больше не был availibe, но у меня был новый порт (COM6). мне пришлось перезагрузить компьютер, чтобы перейти в исходное состояние ... –