在Windows上使用RXTX Java库的NoSuchPortException?

时间:2008-11-08 01:33:00

标签: java windows rxtx

我已按照说明在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”

Devel Library
=========================================
Native lib Version = RXTX-2.0-7pre1
Java lib Version   = RXTX-2.0-7pre1
java.lang.ClassCastException: gnu.io.RXTXCommDriver cannot be cast to gnu.io.CommDriver thrown while loading gnu.io.RXTXCommDriver
gnu.io.NoSuchPortException
    at gnu.io.CommPortIdentifier.getPortIdentifier(CommPortIdentifier.java:218)
    at TwoWaySerialComm.connect(TwoWaySerialComm.java:20)
    at TwoWaySerialComm.main(TwoWaySerialComm.java:107)

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

        try
        {
            (new TwoWaySerialComm()).connect("COM4");
        }

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

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

10 个答案:

答案 0 :(得分:1)

尝试将rxtxSerial.dll放入

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

答案 1 :(得分:1)

你可以用 CommPortIdentifier.getPortIdentifiers()

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

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:1)

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

获得

舒尔茨

答案 4 :(得分:0)

可能是您的系统没有定义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);

希望这能指出你正确的方向。

答案 5 :(得分:0)

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

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

在任何一种情况下,您都希望DLL位于BIN目录中,而不是建议的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也解决了这个问题。它有非常有用的错误例外。

另外,请确保您的串行驱动程序是最新的。下载更新修复了我的其他错误。 -Stosh

答案 6 :(得分:0)

在关闭serialEvent函数中的serialPort时也遇到了问题。 也许这是一个死锁问题,close方法永远等待释放serialEvent的锁。 开始一个新的线程关闭端口为我工作。

答案 7 :(得分:0)

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

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

                  }
                }
              }

答案 8 :(得分:0)

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

答案 9 :(得分:-1)

@Pinheiro你可能想看看this