调用非为您的类编写的JNI方法

时间:2010-03-10 06:39:07

标签: java java-native-interface

似乎JNI方法需要使用内置的Java类签名编写。我想调用一个我没写过的JNI方法。我可以在一个不是用我的课程编写的库中调用本机方法吗?

1 个答案:

答案 0 :(得分:2)

假设:

package com.mycompany.package

class MyClass
{
public native void doSomething();
}

被转换(修改)为本机链接的方法名称:

Java_com_mycompany_package_MyClass_doSomething

似乎您需要在同一个包中使用相同的类才能将本机方法连接到Java方法。如果您无法控制本机库,这似乎可能会出现问题和/或出错。将代码打包到外包中是一个坏主意,尤其是。如果外国包裹签字并盖章。

同样有问题的是,本机调用通常会有一些您可能违反的特定注意事项 - 例如线程安全问题,或释放内存或锁定(需要调用您正在使用的其他本​​机函数)。

根据我(JNI)的经验,我不推荐它,除非你绝望,没有其他选择,而且你真的很熟悉目标系统和API。

您最好的选择是围绕您要使用的目标O / S API编写一个简单的本机包装。