2015-05-10 2 views
0

Я следующий 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 меня изменить его

+0

Вы работаете на окне ОС? –

+0

, а последовательный порт не является родным последовательным портом - это USB-устройство, которое эмулирует последовательные порты ?! –

+0

У меня было много проблем с моими эмулированными устройствами USB на ПК с Windows ... вы должны посмотреть в свою конфигурацию системы поиск там для вашего последовательного порта. они перечислены ... Моя проблема заключалась в том, что, как только я закрыл последовательный порт, он больше не был доступен, и я включил его в другой слот для USB. порт, который я использовал первым (например, COM5), больше не был availibe, но у меня был новый порт (COM6). мне пришлось перезагрузить компьютер, чтобы перейти в исходное состояние ... –

ответ

0

Я не нашел решение для закрытия последовательного порта пакета RxTx в окнах 8,1 окружающей среды, я переехал поэтому пакет JSSC и он работает намного лучше , полное решение, включая закрывающий порт и прослушиватель событий, можно найти здесь.

JSSC solution