2

我在 Rational Functional Tester 脚本中有两行代码,它调用在 dll 中定义的方法(为 jni 调用创建)。但我收到错误:[java.lang.UnsatisfiedLinkError] - com/JniSleep.jniWait()V.]。

导入资源.Script1Helper;

导入 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 项目中,它就像一个魅力(下面的代码)。

导入 com.JniClass;

公共类 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 脚本中不起作用?我也尝试在本机库设置中设置 ddl,但这没有帮助。任何人都可以请帮忙。

4

3 回答 3

0

如果同样的事情在 RFT 之外工作正常,你可以尝试将包含本机实现的 DLL 复制到 RFT 的自定义文件夹中吗?以下注册表将告诉您机器上 Customization 文件夹的位置是什么 [HKEY_LOCAL_MACHINE\SOFTWARE\Rational Software\Rational Test\8\Rational FT Customization Directory]

在进行这些更改之前/之后关闭/重新打开 RFT。

于 2012-11-16T05:55:58.533 回答
0

你的代码说

import com.JniClass;

而你的错误说

com/JniSleep

这两个包必须相等。我闻到了 Java 原生定义和生成的 C 头文件之间的差异。你在这两种情况下都使用完全相同的 DLL 吗?它有哪些标题?Java_com_JniClass还是Java_com_JniSleep

于 2012-11-15T16:43:00.287 回答
0

在 RFT System.load 中不起作用。您需要在要包含的 jar 文件中显式调用 System.load 以访问本机方法。包含此 jar 文件并将 DLL 放入系统“PATH”目录之一后,该 dll 在 RFT 中加载良好。

于 2012-11-19T20:17:32.013 回答