通过 JNI 获取子类 Rectangle2D.Double 成员
Get subclass Rectangle2D.Double member via JNI
假设以下 class
import java.awt.geom.Rectangle2D;
class SomeJavaClass
{
public SomeJavaClass()
{
m_rect = new Rectangle2D.Double();
}
Rectangle2D.Double m_rect;
}
和以下 C++ 代码
jclass someJavaCls = env->FindClass("my/package/SomeJavaClass");
jfieldID rectID = env->GetFieldID(someJavaCls, "m_rect", "Ljava/awt/geom/Rectangle2D;");
问题是我不知道如何访问 m_rect
的 fieldID。通过上面的 GetFieldID
调用,我得到
Exception in thread "Thread-2" java.lang.NoSuchFieldError: m_rect
但是,如果我将 GetFieldID
的签名更改为 "Ljava/awt/geom/Rectangle2D/Double;"
,我也会得到同样的异常。这是怎么做到的?
解决方案似乎是 "Ljava/awt/geom/Rectangle2D$Double;",因为 Double
是 Rectangle2D
的子类。
假设以下 class
import java.awt.geom.Rectangle2D;
class SomeJavaClass
{
public SomeJavaClass()
{
m_rect = new Rectangle2D.Double();
}
Rectangle2D.Double m_rect;
}
和以下 C++ 代码
jclass someJavaCls = env->FindClass("my/package/SomeJavaClass");
jfieldID rectID = env->GetFieldID(someJavaCls, "m_rect", "Ljava/awt/geom/Rectangle2D;");
问题是我不知道如何访问 m_rect
的 fieldID。通过上面的 GetFieldID
调用,我得到
Exception in thread "Thread-2" java.lang.NoSuchFieldError: m_rect
但是,如果我将 GetFieldID
的签名更改为 "Ljava/awt/geom/Rectangle2D/Double;"
,我也会得到同样的异常。这是怎么做到的?
解决方案似乎是 "Ljava/awt/geom/Rectangle2D$Double;",因为 Double
是 Rectangle2D
的子类。