我是在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 我 实在不知道怎么办了,请大家帮帮忙啊
在程序里就调用了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 我 实在不知道怎么办了,请大家帮帮忙啊
不过我记得我以前报UnsatisfiedLinkError的时候后面的异常不是这样的,你删除rxtxSerial.dll试试看看异常一样不。
删除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都是网上下载的
第2个怀疑
RXTXcomm.jar放到classpath里面和不放classpath里面错误信息一样吗
第3个怀疑就是dll和jar的问题了,这什么东西啊,没用过另外你怎么调用的你也没写
把调用jni那个方法定义贴出来看看。
native 方法
是static方法还是非static方法
rxtxSerial.dll和RXTXcomm.jar,他们是跟串口通信所需要的类
参考: http://hi.baidu.com/kaka888/blog/item/c90d8294d17c391ad21b7090.html
我没看博客上面说明的文章,
我的测试步骤
把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
然后线程阻塞
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);
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; }
还有xblue3
这是为何???/