连接到第二个COM端口会关闭第一个COM端口连接

时间:2013-09-05 19:19:50

标签: java swing serial-port

我希望能够连接到多个相同的设备,以便我的程序充当所有这些设备的控制器。 我写了一个程序,允许我通过RS232连接到设备。我用java运行它 1.7在Windows Vista笔记本电脑上使用Java Comms。我使用Startech的USB转RS232适配器(类型ICUSB2324X),它允许我有4个附加的COM端口/ RS232连接。当我一次只连接一个设备时,该程序可以正常工作。 一旦我连接到另一个COM端口上的附加设备,第二个设备就像它应该连接,但第一个连接似乎丢失了。我没有得到任何错误。

我有一个swing GUI,允许我添加一个jPanel的新实例(称为ControllerPanel),每个面板包含一个jCombobox,列出可用的COM端口,并允许您选择要连接的端口。我可以根据需要在框架中添加尽可能多的ControllerPanel,没有任何问题。所选端口存储为“preferredPort”。点击“connectButton”会在我的ControllerPanel类中触发这段代码(之后问题就会出现):

private void connectButtonActionPerformed(java.awt.event.ActionEvent evt) {                                         
    if (!connectedToPort){
        String preferredPort = jComboBox1.getSelectedItem().toString();
        connectToPort(preferredPort);

    }else{
        try {
            closeConnection();
        } catch (IOException ex) {
                         Logger.getLogger(ControllerPanel.class.getName()).log(Level.SEVERE,null,ex);
        }
    }
}  

这会触发我的connectToPort方法

private void connectToPort(String preferredPort) { 
    portList = CommPortIdentifier.getPortIdentifiers();

while (portList.hasMoreElements()) {
    portId = (CommPortIdentifier) portList.nextElement();
    if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {

        if (portId.getName().equals(preferredPort)) {
            try {
                serialPort = (SerialPort) portId.open("deviceController", 2000);
            } catch (PortInUseException e) {
                System.err.println(e);

            }
            try {
                outputStream = serialPort.getOutputStream();
                inputStream = serialPort.getInputStream();

                printStream = new PrintStream(outputStream);
            } catch (IOException e) {
               System.err.println(e); 
            }
            try {
                serialPort.addEventListener((SerialPortEventListener) this);
            } catch (Exception e) {
                System.err.println(e);
            }
                serialPort.notifyOnDataAvailable(true);


            try {
                serialPort.setSerialPortParams(38400,
                        SerialPort.DATABITS_8,
                        SerialPort.STOPBITS_1,
                        SerialPort.PARITY_NONE);
            } catch (UnsupportedCommOperationException e) {
                System.err.println(e);
            }
          }
       }
    }
    connectedToPort = true;
}

第一次连接到端口非常合适。当我尝试从新的ControllerPannel实例连接到新端口时,似乎终止了第一个连接。每次我尝试在另一个COM端口上连接其他设备时,都会终止现有连接。 我不明白第二个连接如何干扰第一个连接,因为两个连接都源自ControllerPanel的不同实例。我可以使用一些帮助,因为我不知道从哪里开始。我目前没有做任何多线程(因为我不确定这是否可以解决我的问题),我应该吗?欢迎所有建议。如果您需要更多代码才能提供帮助,我很乐意提供。

1 个答案:

答案 0 :(得分:0)

我发现代表串行连接的变量设置为静态。我用private替换了关键字static,这解决了这个问题。