我與一個單元通信以通過串行連接控制衛星天線。Java串行端口關閉塊
打開與串行設備的連接:
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
portIdentifier = CommPortIdentifier.getPortIdentifier(device);
serialPort = (SerialPort) portIdentifier.open(name,
serialPort.setSerialPortParams(baudrate, databits, stopbits, parity);
serialPort.setFlowControlMode(flowMode);
bufferedReader = new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
outputStream = serialPort.getOutputStream();
如果單位是不可用的,我有能夠發出新的指令,一旦設備再次之前清除流。但是,如果設備關閉,輸入/輸出流中的這種清除方法會阻塞。同時關閉流或關閉SerialDevice塊。
有沒有辦法關閉/清除這些流或SerialDevice沒有阻止?
bufferedRead.close(); // blocks until device is up again
outputStream.close(); // blocks until device is up again
serialPort.close(); // blocks until device is up again
你好JürgenHannärt,我想這個問題已經過時了,但我用過(並且仍然在使用RXTX-API) - 它對我來說工作正常......你的問題的解決方案可能讓我讀/寫在單獨的線程,這將使端口免費執行關閉操作。 – 2013-12-20 11:30:41
@MartinFrank在單獨的線程中進行讀/寫操作有什麼意義?在設備關閉後,流仍然不能清除 – mangusta 2014-03-18 12:37:12
要麼監聽與設備關閉相關的某些事件(如果有的話),要麼使用循環,在其開始時清除流。他應該檢測到設備關機(例如,在輸入流上接收到「null」或其他特定消息),這將是循環結束的迭代。新的迭代開始於調用clear的地方,但在下一次啓動之前它將被阻塞,並且當設備再次啓動時,迭代繼續直到下一次關閉 – mangusta 2014-03-18 12:53:47