【问题标题】:NoSuchPortException using RXTX Java library on Windows?在 Windows 上使用 RXTX Java 库的 NoSuchPortException?
【发布时间】:2008-11-08 01:32:59
【问题描述】:

我已按照http://www.jcontrol.org/download/readme_rxtx_en.html 的说明在 Windows 上设置 rxtx。

我所做的就是将 rxtxSerial.dll 复制到“C:\Program Files\Java\jdk1.6.0_07\jre\bin” 并将 RXTXcomm.jar 复制到“C:\Program Files\Java\jdk1.6.0_07\jre\lib\ext” (我的 JAVA_HOME 变量设置为 C:\Program Files\Java\jdk1.6.0_07\jre)

我还将 RXTXcomm.jar 添加到我的 Eclipse 项目中。

但是当我运行它时,它仍然显示“NoSuchPortException”

开发库 ========================================== 本机库版本 = RXTX-2.0-7pre1 Java 库版本 = RXTX-2.0-7pre1 java.lang.ClassCastException:gnu.io.RXTXCommDriver 无法转换为 gnu.io.CommDriver 在加载 gnu.io.RXTXCommDriver 时抛出 gnu.io.NoSuchPortException 在 gnu.io.CommPortIdentifier.getPortIdentifier(CommPortIdentifier.java:218) 在 TwoWaySerialComm.connect(TwoWaySerialComm.java:20) 在 TwoWaySerialComm.main(TwoWaySerialComm.java:107)

在我的 java 文件中,我告诉它:

尝试 { (new TwoWaySerialComm()).connect("COM4"); }

我也尝试过 Java Comm API。两者都无法识别我的串行端口,但我确信我正确地遵循了说明。那里有文件。

有人知道它是什么吗?

【问题讨论】:

    标签: java windows rxtx


    【解决方案1】:

    尝试输入rxtxSerial.dll

    C:\Program Files\Java\jdk1.6.0_07\jre\lib\bin
                                          ^^^
    

    【讨论】:

    • 我不认为这是正确的。 rxtx.qbang.org/wiki/index.php/Installation_for_Windows 说“将 rxtxserial.dll 复制到 C:\Program Files\Java\jre7\bin”
    【解决方案2】:

    你可以使用 CommPortIdentifier.getPortIdentifiers()

    识别系统找到的所有可能的端口。

    【讨论】:

    • 通过搜索找到了这个,因为我有一个新的更新应用程序的实例没有找到 com 端口(旧的仍然存在)。尝试了 getPortIdentifiers,有趣的是,它只返回 null。这是否意味着没有可用的端口,还是我做错了什么?
    • 我的更新。似乎是某处严重损坏的东西。我必须从 SVN 签出到 Solaris 机器,将文件复制到 Windows,在那里编译,然后将构建拖回 Solaris 以使其运行。出于某种原因,如果我在 Windows 上进行 SVN 签出或在 Solaris 上进行构建,则构建版本会失败。叹。显然某处损坏了。
    • 列出所有端口 = for (Enumeration e = CommPortIdentifier.getPortIdentifiers(); e.hasMoreElements();) System.out.println(e.nextElement().getName()) ;
    【解决方案3】:

    我对RXTX不太熟悉,但这正常吗?

    java.lang.ClassCastException: gnu.io.RXTXCommDriver cannot be cast to gnu.io.CommDriver thrown while loading gnu.io.RXTXCommDriver
    

    否则问题可能不在于端口本身,而在于类本身? 只是猜测。

    【讨论】:

      【解决方案4】:

      您还可以尝试专门为 Windows 实施的替代解决方案。应该有很多可用的,其中一个您可以从http://www.caerustech.com/JCommWin32.php 获得

      舒尔茨

      【讨论】:

        【解决方案5】:

        可能是您的系统没有定义 COM4 或无法访问。很难猜测可能出了什么问题,因为您还没有发布您的端口初始化代码 - 您发布的内容看起来像是包装代码。

        这是我使用 javax.comm API(但使用来自 serialio.com 的 SerialPort)的工作初始化代码:

        // name comes from config and is "COM1", "COM2", ...
        SerialPort port=(SerialPort)CommPortIdentifier.getPortIdentifier(name).open("YourPortOwnerIdHere",5000);      // owner and ms timeout
        port.setSerialPortParams(bau,dtb,stb,par);
        port.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_IN|SerialPort.FLOWCONTROL_RTSCTS_OUT);
        port.enableReceiveTimeout(1000);
        

        希望这会为您指明正确的方向。

        【讨论】:

          【解决方案6】:

          我同意你的问题看起来像 ClassCastException 而不是另一个。

          对于 Windows,我在 http://www.engidea.com/blog/informatica/winjcom/winjcom.html 使用“Windows Java Serial Com Port Driver”,而且设置起来要容易得多。

          在任何一种情况下,您都需要 BIN 目录中的 DLL,而不是建议的 LIB\BIN。至少这对我有用。我正在使用 NetBeans,我还发现将 jar 和 dll 放入 JDK 中的各种 bin 和 lib\ext 文件夹中很有帮助。

          请注意,如果您的机器上有多个版本的 JRE,您可能没有使用您认为正在使用的那个。此外,作为一个实际问题,我发现将 jar 和 dll 都复制到各种 bin 和 lib\ext 文件夹中更有帮助。让它只是一个粘贴、粘贴、粘贴操作。

          对于windows,我推荐“Windows Java Serial Com Port Driver”,因为它解决了我的USB串口问题。我适合 RXTX,因为拔下 USB 时它会崩溃。 winjcom 也解决了这个问题和其他问题。它有非常有用的错误异常。

          另外,请确保您的串行驱动程序是最新的。下载更新修复了我的另一个错误。 -斯托什

          【讨论】:

            【解决方案7】:

            在 serialEvent 函数中关闭 serialPort 时,我也遇到了问题。 也许这是一个死锁问题,close方法永远等待serialEvent的锁被释放。 启动一个新线程来关闭端口对我有用。

            【讨论】:

              【解决方案8】:

              对于您的问题,我的代码如下:

              if (idPuerto == null)
              {
                          formulario = form;
                          boolean encontrado = false;
              
              
                          listaPuertos = CommPortIdentifier.getPortIdentifiers();
              
                          while( listaPuertos.hasMoreElements() && encontrado == false )
                          {
                            idPuerto = (CommPortIdentifier)listaPuertos.nextElement();
                            //System.out.println(idPuerto.getName());
              
                            if( idPuerto.getPortType() == CommPortIdentifier.PORT_SERIAL )
                            {
                              if( idPuerto.getName().equals(RFIDBascApp.ComBasc) )
                              {        
                                  encontrado = true;
                                  logger.AddInfoUser("Puerto serie encontrado");
              
                                }
                              }
                            }
              

              【讨论】:

                【解决方案9】:

                你有NoSuchPortException,所以首先迭代所有可用端口!

                import gnu.io.CommPortIdentifier;        
                import java.util.Enumeration;  
                
                public class ListAvailablePorts {  
                
                    public void list() {  
                        Enumeration ports = CommPortIdentifier.getPortIdentifiers();  
                
                        while(ports.hasMoreElements()){  
                            CommPortIdentifier port = (CommPortIdentifier) ports.nextElement();
                            System.out.println(port.getName());
                        }
                    }  
                
                    public static void main(String[] args) {  
                        new ListAvailablePorts().list();  
                    }  
                } 
                

                【讨论】:

                  【解决方案10】:

                  @Pinheiro 你可能想看看this

                  【讨论】:

                  • 随机链接到其他地方不是一个好的答案。您应该提取信息以回答问题,并提供链接作为参考以获取更多信息。
                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多