0

我希望能够连接到多个相同的设备,以便我的程序充当所有这些设备的控制器。我编写了一个程序,允许我通过 RS232 连接到设备。我在 Windows Vista 笔记本电脑上使用带有 Java Comms 的 java 1.7 运行它。我使用 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 的不同实例。我可以使用一些帮助,因为我不知道从哪里开始。我目前没有做任何多线程处理(因为我不确定这是否可以解决我的问题),我应该这样做吗?欢迎所有建议。如果您需要更多代码才能提供帮助,我很乐意提供。

4

1 回答 1

0

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

于 2013-09-08T07:34:03.863 回答