串行端口未关闭。 我想释放COM端口
串行端口未关闭。 我想释放COM端口...
下面是我的代码...
import java.io.*;
import java.util.*;
import gnu.io.*;
public class ReadCommPort implements SerialPortEventListener {
static CommPortIdentifier portId;
static Enumeration portList;
InputStream inputStream;
OutputStream outputStream;
public SerialPort serialPort;
List byteList = new ArrayList();
public static Message message = null;
public void readData() {
boolean portFound = false;
String defaultPort = "COM1";
portList = CommPortIdentifier.getPortIdentifiers();
while ( portList.hasMoreElements() ) {
portId = ( CommPortIdentifier )portList.nextElement();
if ( portId.getPortType() == CommPortIdentifier.PORT_SERIAL ) {
if ( portId.getName().equals( defaultPort ) ) {
System.out.println( "Found port: " + defaultPort );
portFound = true;
buildSerialPort();
}
}
}
if ( ! portFound ) {
System.out.println( "port " + defaultPort + " not found." );
}
}
public void buildSerialPort() {
try {
serialPort = (SerialPort) portId.open( "ReadCommPort", 1 );
inputStream = serialPort.getInputStream();
outputStream = serialPort.getOutputStream();
serialPort.addEventListener( this );
serialPort.notifyOnDataAvailable(true);
serialPort.setSerialPortParams( 2400, SerialPort.DATABITS_7, SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE );
}
catch ( Exception e ) {
e.printStackTrace();
}
}
@SuppressWarnings("unchecked")
public void serialEvent( SerialPortEvent event ) {
switch ( event.getEventType() ) {
case SerialPortEvent.BI:
System.out.println( "BI");
break;
case SerialPortEvent.OE:
System.out.println( "OE");
break;
case SerialPortEvent.FE:
System.out.println( "FE");
break;
case SerialPortEvent.PE:
System.out.println( "PE");
break;
case SerialPortEvent.CD:
System.out.println( "CD");
break;
case SerialPortEvent.CTS:
System.out.println( "CTS");
break;
case SerialPortEvent.DSR:
System.out.println( "DSR");
break;
case SerialPortEvent.RI:
System.out.println( "RI");
break;
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
System.out.println( "OUTPUT_BUFFER_EMPTY");
break;
case SerialPortEvent.DATA_AVAILABLE :
try {
int len = inputStream.available();
byte[] readBuffer = new byte[ len ];
// processing data code..
// close the port
// release all resources...
serialPort.removeEventListener();
try
{
serialPort.addEventListener( null );
}
catch (TooManyListenersException e)
{
e.printStackTrace();
}
inputStream.close();
outputStream.close();
serialPort.close();
}
catch ( IOException e )
{
e.printStackTrace();
}
break;
}
}
public static void main(String[] args) {
new ReadCommPort().readData();
}
}
Serial Port Not getting closed. I want to release the COM port ...
Below is my code....
import java.io.*;
import java.util.*;
import gnu.io.*;
public class ReadCommPort implements SerialPortEventListener {
static CommPortIdentifier portId;
static Enumeration portList;
InputStream inputStream;
OutputStream outputStream;
public SerialPort serialPort;
List byteList = new ArrayList();
public static Message message = null;
public void readData() {
boolean portFound = false;
String defaultPort = "COM1";
portList = CommPortIdentifier.getPortIdentifiers();
while ( portList.hasMoreElements() ) {
portId = ( CommPortIdentifier )portList.nextElement();
if ( portId.getPortType() == CommPortIdentifier.PORT_SERIAL ) {
if ( portId.getName().equals( defaultPort ) ) {
System.out.println( "Found port: " + defaultPort );
portFound = true;
buildSerialPort();
}
}
}
if ( ! portFound ) {
System.out.println( "port " + defaultPort + " not found." );
}
}
public void buildSerialPort() {
try {
serialPort = (SerialPort) portId.open( "ReadCommPort", 1 );
inputStream = serialPort.getInputStream();
outputStream = serialPort.getOutputStream();
serialPort.addEventListener( this );
serialPort.notifyOnDataAvailable(true);
serialPort.setSerialPortParams( 2400, SerialPort.DATABITS_7, SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE );
}
catch ( Exception e ) {
e.printStackTrace();
}
}
@SuppressWarnings("unchecked")
public void serialEvent( SerialPortEvent event ) {
switch ( event.getEventType() ) {
case SerialPortEvent.BI:
System.out.println( "BI");
break;
case SerialPortEvent.OE:
System.out.println( "OE");
break;
case SerialPortEvent.FE:
System.out.println( "FE");
break;
case SerialPortEvent.PE:
System.out.println( "PE");
break;
case SerialPortEvent.CD:
System.out.println( "CD");
break;
case SerialPortEvent.CTS:
System.out.println( "CTS");
break;
case SerialPortEvent.DSR:
System.out.println( "DSR");
break;
case SerialPortEvent.RI:
System.out.println( "RI");
break;
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
System.out.println( "OUTPUT_BUFFER_EMPTY");
break;
case SerialPortEvent.DATA_AVAILABLE :
try {
int len = inputStream.available();
byte[] readBuffer = new byte[ len ];
// processing data code..
// close the port
// release all resources...
serialPort.removeEventListener();
try
{
serialPort.addEventListener( null );
}
catch (TooManyListenersException e)
{
e.printStackTrace();
}
inputStream.close();
outputStream.close();
serialPort.close();
}
catch ( IOException e )
{
e.printStackTrace();
}
break;
}
}
public static void main(String[] args) {
new ReadCommPort().readData();
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您使用的是RXTX-2.1版本,那么通过调用removeEventListener(); 程序应该挂起。 这是由于库中的本机代码造成的。 这可以通过运行这样的代码来避免,但就我个人而言,这种方式不太喜欢:
如果你基本上使用RXTX,那么使用2.2版本。 以及尝试组件 jSSC 的提示 - http://code.google.com /p/java-simple-serial-connector/
If you are using a version of RXTX-2.1, then by calling removeEventListener (); program should hang. This is due to native code in the library. This can be avoided by running such a code, but to me personally this way do not really like:
If you basically use RXTX, then use version 2.2. As well as tips to try component jSSC - http://code.google.com/p/java-simple-serial-connector/