我在从COM端口读取内容时遇到问题,我在JavaFX应用程序中使用txrx库。这是显示它正在阅读的内容的代码:
public void serialEvent(SerialPortEvent evt) {
String bytesin = null;
String fullLine = " ";
if (evt.getEventType() == SerialPortEvent.DATA_AVAILABLE)
{
try
{
byte singleData = (byte)input.read();
if (singleData != CR_ASCII)
{
bytesin = new String(new byte[] {singleData});
fullLine = fullLine+bytesin;
System.out.println(fullLine);
}
else if ( singleData == CR_ASCII)
{
System.out.println("CR detected!");
}
else
{
statusLabel.setText("Read!");
}
}
catch (Exception e)
{
statusLabel.setText("Failed to read data. (" + e.toString() + ")");
System.out.println("Failed to read data. (" + e.toString() + ")");
}
}
}
==该代码的问题在于它每行显示一个字符。 我的USB设备输出以下文本(字符是ASCII,而不是字符):
**T-Pod-1Ch**(Char 13)(Char 10)
但是我的代码输出给出了这个:
*
*
T
-
P
o
d
-
1
C
h
*
*
CR detected!
*
*
T
-
P
o
d
-
1
C
h
*
*
CR detected!
答案 0 :(得分:0)
(byte)input.read()
读取单个字节,System.out.println(fullLine)
打印此字符,然后打印一个新行。所以代码有效。请尝试使用System.out.print(fullLine)
。
答案 1 :(得分:0)
从流中读取一行文本的常用方法是使用readLine()
中的BufferedReader
方法。你有什么理由不能做到:
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
// ...
String fullLine = reader.readLine();
System.out.println(fullLine);
而不是一次尝试读取一个字节(并且基本上重新发明了轮子)。