任何JNI专家都可以解释以下情况,因为我无法解决这个问题。
假设我们有这门课程:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// Register your parse models
ParseObject.registerSubclass(GameScore.class); // for example
Parse.enableLocalDatastore(this);
Parse.initialize(new Parse.Configuration.Builder(context)
.applicationId(APPLICATION_ID)
.server(SERVER)
.build()
);
}
}
在JNI(C)中:
public static int solution(int[] A)
{
Array.Sort(A);
List<int> missing = new List<int>();
List<int> An = new List<int>();
foreach (var r in A)
{
if (r > 0)
{
An.Add(r);
}
}
int lengthList = (An[An.Count]) - (An[0]);
for (int i = An[0]; i <= lengthList - 1; i++)
{
if (An[i + 1] != An[i] + 1)
{
missing.Add(An[i] + 1);
An.Insert(i + 1, An[i] + 1);
}
}
if (missing != null)
{
return missing[0];
}
else
return 0;
}
但是,如果不是
,这样可以正常工作public class MyClass {
static {
System.loadLibrary("recorder");
}
private native long function1();
private native void function2();
private void callback() {
}
public static void main(String[] args) throws Exception {
MyClass obj1 = new MyClass();
obj1.function1();
}
}
我宣布
JNIEXPORT jstring JNICALL function1(JNIEnv *env, jobject object) {
jclass cls = (*env)->GetObjectClass(env, object);
jmethodID mid = (*env)->GetMethodID(env, cls, "callback", "()V");
if (mid != NULL) {
(*env)->CallVoidMethod(env, object, mid);
}
}
从JNI到Java的调用失败,抱怨它无法在Java中找到函数回调。
由于
答案 0 :(得分:1)
对于静态本机方法,本机代码中的第二个参数不应该是jobject
而是jclass
。
但您应该使用javah
工具生成c标头,而不是手动编写它们。