在进行JNI调用时,RFT会抛出不满意的LinkError

时间:2012-11-15 05:33:02

标签: java-native-interface rft

我在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,但这没有帮助。任何人都可以帮忙。

3 个答案:

答案 0 :(得分:0)

您的代码说

import com.JniClass;

虽然你的错误是

com/JniSleep

这两个包必须相同。我觉得Java本机定义和生成的C头之间存在差异。你在两种情况下都使用绝对相同的DLL吗?它有哪些标题? Java_com_JniClassJava_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中加载好。