我在Rational Functional Tester脚本中有一个两行代码,它调用dll中定义的方法(为jni调用创建)。但我收到错误:[java.lang.UnsatisfiedLinkError] - com / JniSleep.jniWait()V。]。
import resources.Script1Helper;
import com.JniClass;
公共类Script1扩展了Script1Helper {
static {
System.load("C:/VisualStudioProject/JniClass/Debug/JniClass.dll");
}
public void testMain(Object[] args)
{
JniClass jniClass = new JniClass();
jniClass.jniWait(); //error thrown here
}
}
如果我在普通的java类(而不是RFT脚本)中运行相同的代码片段,在同一个RFT项目中,它就像一个魅力(下面的代码)。
import com.JniClass;
public class testTimer {
/**
* @param args
*/
// TODO Auto-generated method stub
static {
System.load("C:/VisualStudioProject/JniClass/Debug/JniClass.dll");
}
public static void main(String[] args) {
JniClass jniClass = new JniClass();
jniClass.jniWait();
}
}
为什么代码在RFT脚本中不起作用?我也试过在Native库设置中设置ddl,但这没有帮助。任何人都可以帮忙。
答案 0 :(得分:0)
您的代码说
import com.JniClass;
虽然你的错误是
com/JniSleep
这两个包必须相同。我觉得Java本机定义和生成的C头之间存在差异。你在两种情况下都使用绝对相同的DLL吗?它有哪些标题? Java_com_JniClass
或Java_com_JniSleep
?
答案 1 :(得分:0)
如果同样的事情在RFT之外正常工作那么,您是否可以尝试将包含本机实现的DLL(复制)到RFT的自定义文件夹中? 以下注册表将告诉您计算机上的Customization文件夹的位置是什么[HKEY_LOCAL_MACHINE \ SOFTWARE \ Rational Software \ Rational Test \ 8 \ Rational FT自定义目录]
在进行这些更改之前/之后关闭/重新打开RFT。
答案 2 :(得分:0)
在RFT System.load中无效。您需要在jar文件中显式调用System.load来访问本机方法。一旦你包含这个jar文件,并将DLL放在一个系统'PATH'目录中,dll就会在RFT中加载好。