gpt4 book ai didi

java - JNI GetObjectField() 为两个 DirectByteBuffer 之一返回 NULL

转载 作者:行者123 更新时间:2023-11-30 04:47:29 26 4
gpt4 key购买 nike

好吧,这让我的小心思感到困惑。

我从对 GetObjectField() 的两次调用之一中得到了 null 返回。每个对象都是一个 DirectByteBuffer。该调用不会因找不到字段而引发异常,但仍然返回 NULL。

这是一个特殊的部分 - 如果我更改内部类中字段定义的顺序,我会看到从源到目标的 null 更改。

这里是代码的释义,以将问题简化为本质。

public class Outer {
private native int submitInner(Inner submission);

private static class Inner {
private int status;
private ByteBuffer source;
private ByteBuffer dest;
private Outer outer;


Inner(Outer outer, ByteBuffer source, ByteBuffer dest) {
this.outer = outer;
this.source = source;
this.dest = dest;
status = 0;
}
}

native 代码。为了简洁起见,我在这里剪掉了字段 ID。可以这么说,问题从一个字段转移到另一个字段,而没有触及这些字段,因此字段 id 可能没问题。

JNIEXPORT jint JNICALL Java_Outer_submitInner
(JNIEnv *env, jobject thisj, jobject inner ) {
jobject source = (*env)->GetObjectField(env, thisj, Inner_source);
jobject dest = (*env)->GetObjectField(env, thisj, Inner_dest);
jobject outer = (*env)->GetObjectField(env, thisj, Inner_outer);
printf("%016llx %016llx %016llx\n", (long long)source, (long long)dest, (long long)outer);
...

有人有任何想法可以理解这一点吗?

有什么调试建议吗?我正在从 Eclipse 浏览 Java。有没有办法通过 C 或汇编语言来了解到底发生了什么?

谢谢, - 蒂姆。

最佳答案

您正在寻找 Inner 字段,但您提供了 Outer (thisj) 实例作为获取它们的位置。

关于java - JNI GetObjectField() 为两个 DirectByteBuffer 之一返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10631976/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com