我是在eclipse里编译的,里面的程序涉及到一个rxtxSerial.dll和RXTXcomm.jar,他们是跟串口通信所需要的类
在程序里就调用了RXTXcomm.jar里的类。
rxtxSerial.dll我放在了C:\WINDOWS\system32下面,而且用System.loadLibrary("rxtxSerial")加载了。
RXTXcomm.jar我放在了jre下或者通过命令A到底External JARs..把RXTXcomm.jar加进来,两种都会出现以上错误。。
错误代码如下:
java.lang.UnsatisfiedLinkError: nativeGetVersion thrown while loading gnu.io.RXTXCommDriver
gnu.io.NoSuchPortException
at gnu.io.CommPortIdentifier.getPortIdentifier(CommPortIdentifier.java:218)
at ccb.device.zt.ZtSerialBean.Initialize(ZtSerialBean.java:31)
at ccb.device.zt.ZtMpad.OpenPort(ZtMpad.java:31)
at zttest.CBHBEnablePinPress(zttest.java:126)
at zttest.aa(zttest.java:524)
at zttest.main(zttest.java:547)
端口不存在!
5555 我 实在不知道怎么办了,请大家帮帮忙啊 

解决方案 »

  1.   

    放到C:\WINDOWS\system32下面不应存在这种错误,你删除rxtxSerial.dll应该报的错和现在一样,你确定dll没问题吗,放到启动命令的文件夹下面试试,
    不过我记得我以前报UnsatisfiedLinkError的时候后面的异常不是这样的,你删除rxtxSerial.dll试试看看异常一样不。
      

  2.   


    删除rxtxSerial.dll话,错误:
    一: 会弹出提示框:  标题:Jana Virtual Machine Launcher
     错误信息:     Fail exception occurred Program will exit
    在下面的 console 里:
    java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1517)
    at java.lang.Runtime.loadLibrary0(Runtime.java:788)
    at java.lang.System.loadLibrary(System.java:834)
    at zttest.main(zttest.java:535)rxtxSerial.dll和RXTXcomm.jar都是网上下载的
      

  3.   

    那加载错dll的可能就没有了
    第2个怀疑
    RXTXcomm.jar放到classpath里面和不放classpath里面错误信息一样吗
    第3个怀疑就是dll和jar的问题了,这什么东西啊,没用过另外你怎么调用的你也没写
    把调用jni那个方法定义贴出来看看。
    native 方法
    是static方法还是非static方法
      

  4.   

    程序是在eclipse里运行的,RXTXcomm.jar是程序必须调用的,所以把它放到classpath里而不再eclipse里加载或不在jre里加载,就会出错,提示找不到RXTXcomm.jar包里的类的函数。
    rxtxSerial.dll和RXTXcomm.jar,他们是跟串口通信所需要的类
    参考: http://hi.baidu.com/kaka888/blog/item/c90d8294d17c391ad21b7090.html
      

  5.   

    把这个CommPortIdentifier类反编译出来看看getPortIdentifier(CommPortIdentifier.java:218) 这儿的代码是什么,感觉是这个类与native code通信时发生了异常
      

  6.   

    晕我下回来试了下就成功了
    我没看博客上面说明的文章,
    我的测试步骤
    把rxtxParallel.dll,rxtxSerial.dll放到system32下面
    然后把博客上面的java完全复制
    然后将RXTXcomm.jar引入到eclipse工程
    执行demo类
    结果如下
    Stable Library
    =========================================
    Native lib Version = RXTX-2.1-7
    Java lib Version   = RXTX-2.1-7
    然后线程阻塞
      

  7.   

    反编译源码:
    public static CommPortIdentifier getPortIdentifier(String s)
            throws NoSuchPortException
        {
            CommPortIdentifier commportidentifier = CommPortIndex;
            synchronized(Sync)
            {
                for(; commportidentifier != null && !commportidentifier.PortName.equals(s); commportidentifier = commportidentifier.next);
            }
            if(commportidentifier != null)
                return commportidentifier;
            else
                throw new NoSuchPortException();
        }
    调用的代码:
    PortName = "COM" + i;
    portId = CommPortIdentifier.getPortIdentifier(PortName);
      

  8.   

    环境变量设置:
    JAVA_HOME   C:\j2sdk1.4.2_17
    classpath     .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;c:\RXTXcomm.jar
    Path     C:\PROGRA~1\Borland\CBUILD~1\Bin;C:\PROGRA~1\Borland\CBUILD~1\Projects\Bpl;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%JAVA_HOME%\bin
    程序中涉及到调用RXTXcomm.jar包的代码//要用到RXTXcomm.jar的gnu文件夹的io文件夹的CommPortIdentifier类里
    import gnu.io.*;//所以这里要引入
    import java.io.*;
    public class ZtSerialBean {
    public ZtSerialBean(int i) {
    PortName = "COM" + i;
    } public int Initialize(short word0,int timeout) {
    int j;
    byte byte0;
    j = 1;
    byte0 = -2;
    try {
    portId = CommPortIdentifier.getPortIdentifier(PortName);
    serialPort = (SerialPort) portId.open("Serial_Communication", 2000); } catch (PortInUseException e) {
    System.out.println("端口已经被占用!");
    e.printStackTrace();
    return -3;
    } catch (NoSuchPortException e) {
    System.out.println("端口不存在!");
    e.printStackTrace();
    return -4;
    } try {
    in = serialPort.getInputStream();
    out = serialPort.getOutputStream();
    } catch (IOException ioexception) {
    return -5;
    }
    try {
    serialPort.setSerialPortParams(word0, 8, 1, 0);
    System.out.println("%%%%");
    serialPort.enableReceiveTimeout(timeout);
    } catch (UnsupportedCommOperationException unsupportedcommoperationexception) {
    return byte0;
    } return j; }
      

  9.   

    没有做过串口通信东西,我觉得你的PortName不对引起的,现确认一下这个 "COM" + i是否正确
      

  10.   

    楼主今天和我一起在看贴啊,不过没你猛,呵呵。
    还有xblue3 
      

  11.   

    代码没问题,如huoyin所说,你机器com口正常吗,有条件换台机器试试吗?
      

  12.   

    我以前试过JDK1.6的,是可以的,然后卸载1.6 再装1.4的就出现这个问题了.就算我再重装1.6也不行了 
    这是为何???/
      

  13.   

    你在哪下的RXTXcomm.jar,我怎么找不到啊?