在Windows上使用RXTX Java库的NoSuchPortException?

在Windows上使用RXTX Java库的NoSuchPortException?,java,windows,rxtx,Java,Windows,Rxtx,我已按照说明在windows上从安装rxtx 我所做的就是将rxtxSerial.dll复制到“C:\Program Files\Java\jdk1.6.0\U 07\jre\bin” 并将RXTXcomm.jar复制到“C:\Program Files\Java\jdk1.6.0\u 07\jre\lib\ext” (my JAVA_HOME变量设置为C:\Program Files\JAVA\jdk1.6.0_07\jre) 我还将RXTXcomm.jar添加到我的eclipse项目中 但当

我已按照说明在windows上从安装rxtx

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

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

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

德维尔图书馆 ========================================= 本机lib版本=RXTX-2.0-7pre1 Java lib Version=RXTX-2.0-7pre1 java.lang.ClassCastException:gnu.io.RXTXCommDriver无法转换为加载gnu.io.RXTXCommDriver时抛出的gnu.io.CommDriver gnu.io.NoSuchPortException 位于gnu.io.CommPortIdentifier.getPortIdentifier(CommPortIdentifier.java:218) 在TwoWaySerialComm.connect(TwoWaySerialComm.java:20) 位于TwoWaySerialComm.main(TwoWaySerialComm.java:107) 在我的java文件中,我告诉它:

try { (new TwoWaySerialComm()).connect("COM4"); } 尝试 { (新的TwoWaySerialComm()).connect(“COM4”); } 我还尝试了Java Comm API。两者都无法识别我的串行端口,但我确信我正确地遵循了说明。那里有文件


有人知道它可能是什么吗?

试着把
rxtxSerial.dll
放进去

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

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

下面是我使用javax.comm API(但使用serialio.com中的SerialPort)工作的init代码:

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

您可以使用 CommPortIdentifier.getPortIdentifiers()


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

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

java.lang.ClassCastException: gnu.io.RXTXCommDriver cannot be cast to gnu.io.CommDriver thrown while loading gnu.io.RXTXCommDriver
否则,问题不在于端口本身,而在于类本身?
只是一个猜测。

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

对于windows,我在使用“windows Java串行Com端口驱动程序”,这对我来说更容易设置

无论哪种情况,您都希望DLL位于BIN目录中,而不是建议的LIB\BIN目录中。至少这对我是有效的。我正在使用NetBeans,我还发现将jar和dll放入JDK中的各种bin和lib\ext文件夹很有帮助

请注意,如果您的计算机上有多个JRE版本,则可能没有使用您认为正在使用的版本。另外,实际上,我发现将jar和dll复制到不同的bin和lib\ext文件夹中更有用。使它只是一个粘贴,粘贴,粘贴操作

对于windows,我推荐“windows Java串行Com端口驱动程序”,因为它解决了我的USB串行端口问题。我曾与RXTX配合,因为当USB被拔出时,它会崩溃。winjcom解决了这个问题,也解决了其他问题。它有非常有用的错误异常

另外,确保串行驱动程序是最新的。下载更新修复了我的另一个bug。
-Stosh

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

您也可以尝试一种专门为Windows实现的替代解决方案。应该有很多,其中一个你可以从


Shultz

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

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");

                  }
                }
              }

@Pinheiro您可能想看看您没有
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();  
    }  
} 

我通过搜索找到了这个,因为我有一个新更新的应用程序实例找不到com端口(旧的仍然找到)。尝试了getPortIdentifier,有趣的是,它只返回null。这是不是意味着没有可用的端口,或者我做错了什么?更新我的。似乎有什么东西坏得很厉害。我必须从SVN签出到Solaris框,将文件复制到Windows,在那里编译,然后将构建拖回Solaris使其运行。出于某种原因,如果我在Windows上签出SVN或在Solaris上进行构建,则构建版本将失败。唉。显然某个地方损坏了。要列出所有端口=for(枚举e=CommPortIdentifier.GetPortIdentifier();e.hasMoreElements();)System.out.println(e.nextElement().getName());我认为那是不对的。rxtx.qbang.org/wiki/index.php/Installation_for_Windows说,“将rxtxserial.dll复制到C:\Program Files\Java\jre7\bin”到其他位置的随机链接不是一个好答案。你应该提取信息来回答问题,并提供链接作为更多信息的参考。
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");

                  }
                }
              }
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();  
    }  
}