最近心血来潮想用java实现与下位机的串口通讯,下位机使用STM32等间隔向串口发送八位的数据,上位机主要实现数据的接收和发送。过程中遇到的问题为:一旦执行到输入输出流对串口进行读写操作时,程序直接崩溃,截图和全部代码如下,希望有经验的朋友能指点迷津:
程序运行初始界面:
点击“打开串口”按钮后直接闪退崩溃:
项目所有代码片(无保留):
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.Border;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Scanner;
import java.util.TooManyListenersException;
import gnu.io.CommPort;
import gnu.io.CommPortIdentifier;
import gnu.io.NoSuchPortException;
import gnu.io.PortInUseException;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import gnu.io.UnsupportedCommOperationException;
public class serialCommunication extends JFrame implements ActionListener, SerialPortEventListener {
//串口对象、串口名称列表
SerialPort serialPort;
ArrayList<String> arrayList = null;
InputStream inputStream = null;
OutputStream outputStream = null;
//拆分窗格
JSplitPane jSplitPane1;
//设置、接收区、发送区、发送总区、左总区、右绘图区、小区1,2,3
JPanel panel1, panel2, panel3, panel4, panel5, panel6, panel7, panel8, panel9;
//清空接收区、打开/关闭串口、清空发送区、发送数据
JButton button1, button2, button3, button4;
//选择串口、波特率、发送模式、接收模式
JLabel jLabel1, jLabel2, jLabel3, jLabel4;
//选择串口组合框、波特率组合框
JComboBox jComboBox1, jComboBox2;
//Hex、字符、Hex、字符
JRadioButton jRadioButton1, jRadioButton2, jRadioButton3, jRadioButton4;
//组里只可二选一
ButtonGroup buttonGroup1, buttonGroup2;
//接收显示区、发送显示区
JTextArea jTextArea1, jTextArea2;
//显示区滚动条
JScrollPane jScrollPane1, jScrollPane2;
//主--方法
public static void main(String[] args) {
new serialCommunication();
}
//构造--方法
public serialCommunication() {
initWindow();
addSerialPort();
}
//初始化窗口控件--方法--调用于构造函数serialCommunication()
public void initWindow() {
panel1 = new JPanel(); //设置
panel2 = new JPanel(); //接收区
panel3 = new JPanel(); //发送区
panel4 = new JPanel(); //发送总区
panel5 = new JPanel(); //左边总区
panel6 = new JPanel(); //右边绘图区
panel7 = new JPanel(); //单选区1
panel8 = new JPanel(); //单选区2
panel9 = new JPanel(); //小区3
//设置panel左上标题
Border titleBorder1 = BorderFactory.createTitledBorder("设置");
panel1.setBorder(titleBorder1);
Border titleBorder2 = BorderFactory.createTitledBorder("接收区");
panel2.setBorder(titleBorder2);
Border titleBorder3 = BorderFactory.createTitledBorder("发送区");
panel3.setBorder(titleBorder3);
jLabel1 = new JLabel("选择串口", JLabel.CENTER);
jLabel2 = new JLabel("波 特 率", JLabel.CENTER);
jLabel3 = new JLabel("发送模式", JLabel.CENTER);
jLabel4 = new JLabel("接收模式", JLabel.CENTER);
jLabel1.setFont(new Font("Dialog", Font.BOLD, 14))