过去三天我试图解决以下问题。我花了三天时间阅读许多论坛中的各种主题。
这是我的问题: 我尝试将命令发送到通过虚拟Com-Port连接的蓝牙HC-05设备。在我的情况下“COM4”。
我使用RXTX建立与串口的连接。这很好。
public static void main(String[] args) {
portList = CommPortIdentifier.getPortIdentifiers();
boolean portFound = false;
while (portList.hasMoreElements()) {
portId = (CommPortIdentifier) portList.nextElement();
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
if (portId.getName().equals("COM4")) {
portFound = true;
SimpleRead reader = new SimpleRead();
}
}
}
}
@SuppressWarnings("restriction")
public SimpleRead() {
try {
serialPort = (SerialPort) portId.open("SimpleReadApp", 2000);
} catch (PortInUseException e) {System.out.println(e);}
try {
serialPort.setOutputBufferSize(15);
serialPort.setEndOfInputChar((byte)'\n');
inputStream = serialPort.getInputStream();
outputStream = serialPort.getOutputStream();
} catch (IOException e) {System.out.println(e);} catch (UnsupportedCommOperationException e)
e.printStackTrace();
}
try {
serialPort.addEventListener(this);
} catch (TooManyListenersException e) {System.out.println(e);}
serialPort.notifyOnDataAvailable(true);
try {
serialPort.setSerialPortParams(300,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
} catch (UnsupportedCommOperationException e) {System.out.println(e);}
serialPort.setRTS(true);
serialPort.setDTR(true);
serialPort.notifyOnDataAvailable(true);
serialPort.setInputBufferSize(8192);
serialPort.setOutputBufferSize(8192);
writeThread = new Thread(new SerialWriter(outputStream));
writeThread.start();
readThread = new Thread(this);
readThread.start();
}
编写器线程中出现问题。当调用ByteArrayOutputStream的writeTo()
方法时,程序会挂起而不会抛出异常。
public class SerialWriter implements Runnable {
OutputStream out;
public SerialWriter(OutputStream out) {
this.out = out;
}
public void run() {
try {
Thread.sleep(500);
while (true) {
out.flush();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
baos.write("AT\n".getBytes(Charset.forName("ASCII")));
baos.writeTo(out); // <-- Here is my Problem. The program just
// hangs up
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
我的操作系统是Windows 8.1 64位。
我可以使用控制台应用程序 hterm 连接蓝牙设备。
感谢您提供解决这个令人讨厌的问题的任何帮助或提示!!