当前位置: 首页 > 知识库问答 >
问题:

JNI GetFieldID调用时出现挂起的异常“java.lang.NoSuchFieldError”

禹智渊
2023-03-14

我不明白为什么我总是得到这个错误

public class MainActivity extends Activity {
    ...
    private FileDescriptor mFd;
}
JNIEXPORT jobject JNICALL Java_ua_taras_appc_MainActivity_configure (...)
{
 /* Create a corresponding file descriptor */
    {
        jclass cFileDescriptor = (*env)->FindClass(env, "java/io/FileDescriptor");
        jmethodID iFileDescriptor = (*env)->GetMethodID(env, cFileDescriptor, "<init>", "()V");
        jfieldID descriptorID = (*env)->GetFieldID(env, cFileDescriptor, "descriptor", "I");
        mFileDescriptor = (*env)->NewObject(env, cFileDescriptor, iFileDescriptor);
        (*env)->SetIntField(env, mFileDescriptor, descriptorID, (jint)fd);
    }
    return mFileDescriptor;
}
JNIEXPORT void JNICALL Java_ua_taras_appc_MainActivity_readuart (...)
{
    jclass MainActivityClass = (*env)->GetObjectClass(env, thiz);
    jclass FileDescriptorClass = (*env)->FindClass(env, "java/io/FileDescriptor");

    jfieldID mFdID = (*env)->GetFieldID(env, MainActivityClass, "mFd", "Ljava/io/FileDescriptor;");
    jfieldID descriptorID = (*env)->GetFieldID(env, FileDescriptorClass, "descriptor", "I");

    jobject mFd = (*env)->GetObjectField(env, thiz, mFdID);
    jint descriptor = (*env)->GetIntField(env, mFd, descriptorID);
}

共有1个答案

姜嘉赐
2023-03-14

因此没有这样的字段作为前面的结果

jfieldID mFdID = (*env)->GetFieldID(env, MainActivityClass, "mFd", "Ljava/io/FileDescriptor;");

这是您连续两次调用getFieldId()的唯一地方,但您未能检查错误。必须对所有JNI API调用进行错误检查。

 类似资料:
  • 我正在构建一个使用NDK和Java的android应用程序。应用程序在调试模式下运行良好。但当我试图构建release APK时。它开始崩溃。调试发布APK后,我发现

  • 当我从EJB调用一个方法时,我遇到了一个奇怪的异常。EJB的方法只是参考BD并返回一个VO。当我从一个独立的客户机调用该方法时,所有这些都能很好地工作,但是当我从同一台服务器、从另一个EJB调用该方法时,它返回:org。天啊。科尔巴。未知:重新引发挂起的异常时发现意外异常:(.VOObject)vmcid:IBM次要代码:EA5已完成:可能 服务器是WebSphereApplicationServ

  • 这是我的客户端代码 这是我的Rest控制器代码: 如果我在调用后使用 String.class 作为返回类型,则相同的代码也有效。但不是响应实体类。我做错了什么,如果我需要客户端也相同的响应实体

  • 在每个人告诉我增加超时值之前,我不想增加它,因为100秒不够长是没有意义的。在不引发超时/任务取消异常的情况下,所有其他get和post响应花费的时间更少。 这是密码 这是直接的。有些东西可以打印,有些东西我们不可以 var result=等待客户端。邮递同步(“http://www.foodservice.com/home/fs_login_check.cfm“,内容); 我看不出为什么它会挂在

  • 我正试着用我的android项目运行一个谷歌OCR Tesseract。我已经使用android ndk遵守了tesseract,在我尝试运行android项目后收到了这个错误。 我的环境如下 Android5.1.1 作为参考,我从这里列出的示例构建示例链接 提前感谢! 下面是我的logcat结果的一个片段:

  • 此行得删除指向错误: 异常中的Package name是从其中复制代码的项目的包名。 但我的应用程序的包名是。 我在我的项目中搜索了。 以下是我的清单文件: