这是来自RXTX串行通信程序的示例代码的一部分。 我想知道如何提取我创建的字符串变量来存储输出,以便我可以在另一个类中使用它。输出显示在控制台上,但我想在JTextfield中显示它,我无法提取它。我已经完成了GUI部分。 首先,我将展示主要部分:
public class MainSerialGui {
public static void main(String[] args) {
SerialGui vimal = new SerialGui ();
vimal.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
vimal.setSize(250, 200);
vimal.setVisible(true);
}
}
这是GUI部分
public class SerialGui extends JFrame { //inherit all the stuff from JFrame and let us create a window
private JTextField item1;
private JButton readButton;
public SerialGui (){
setLayout(new FlowLayout());
item1 = new JTextField("Display Output");
add(item1);
readButton = new JButton("Read Data");
add(readButton);
thehandler handler = new thehandler();
readButton.addActionListener(handler);
}
private class thehandler implements ActionListener {
public void actionPerformed(ActionEvent event) {
if(event.getSource() == readButton){
String portName = "COM4";
try{
CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName);
if ( portIdentifier.isCurrentlyOwned() )
{
System.out.println("Error: Port is currently in use");
}
else
{
CommPort commPort = portIdentifier.open(this.getClass().getName(),2000);
if ( commPort instanceof SerialPort )
{
SerialPort serialPort = (SerialPort) commPort;
serialPort.setSerialPortParams(57600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE); // Setting port parameters
InputStream in = serialPort.getInputStream();
OutputStream out = serialPort.getOutputStream();
(new Thread(new SerialReader(in))).start();
SerialReader comm = new SerialReader(null);
item1.setText(comm.str);
}
}
}
catch (Exception e){
e.printStackTrace();
System.out.println("Only serial ports please");
}
}
}
}
}
这是一个单独的类,用于从comm端口读取数据。
public class SerialReader implements Runnable {
InputStream in;
public String str;
public SerialReader ( InputStream in )
{
this.in = in;
}
public void run ()
{
byte[] buffer = new byte[1024];
int len = -1;
try
{
while ( ( len = this.in.read(buffer)) > -1 )
{
str = new String(buffer,0,len); // I would like to take this String
System.out.print(str); // and use it to display in a
} // Jtextfield
}
catch ( IOException e )
{
e.printStackTrace();
}
}
}
这是我最初提取它以在文本字段中显示的方式,但结果显示为null。我将str声明为公共字符串,以便在GUI类中可见。正在读取的数据可以在控制台中显示,但文本字段中没有更改。是因为它甚至在输出存储在str之前或者因为'null'参数之前取值? 我无法用任何其他参数替换它。
SerialReader comm = new SerialReader(null);
item1.setText(comm.str);
http://rxtx.qbang.org/wiki/index.php/Two_way_communcation_with_the_serial_port
答案 0 :(得分:0)
您正在创建两个SerialReader实例,并在使用另一个的输出时启动其中一个实例。
尝试更换,
(new Thread(new SerialReader(in))).start();
SerialReader comm = new SerialReader(null);
item1.setText(comm.str);
与
SerialReader comm = new SerialReader(in);
Thread commThread = new Thread(comm);
commThread.start();
commThread.join();
item1.setText(comm.str);
希望这有帮助。