繁体   English   中英

从JNI代码中检查Java类中是否存在可选字段或方法

[英]Check for presence of optional field or method in Java Class from JNI code

我有一个Java类可以被子类化以添加一个额外的字段。 有一个相应的C ++ JNI方法将与该字段进行交互。 但是,我希望JNI代码同时处理基类和子类,这意味着它必须检测字段是否存在。

我的(简化)JNI代码如下所示:

fid = j.GetFieldID( jc, UTF8_SECPARM, SIG_SECPARM );
if ( fid == 0 ) return;
... continue with fid ...

虽然GetFieldID()方法返回NULL,但应用程序在处理的某个进一步的点处获得异常,这似乎与此代码无关。 然而,它在某种程度上是相关的,因为如果我只是在GetFieldID()方法之前返回,则没有异常。

如何从JNI代码中可靠地测试对象中字段或方法的存在?

事实证明,虽然GetFieldID()方法返回NULL,但是还生成了必须处理的Java异常。

解决方案是检查异常并清除(或处理)异常。 最简单的解决方案是:

fid = j.GetFieldID( jc, UTF8_SECPARM, SIG_SECPARM );
if ( JNI_TRUE == j.ExceptionCheck() ) {
    j.ExceptionClear();
    return;
}
... continue with fid ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM