diff --git a/java/lang/Object.cs b/java/lang/Object.cs
index 8e2a6f9..2c97fa2 100644
--- a/java/lang/Object.cs
+++ b/java/lang/Object.cs
@@ -56,6 +56,11 @@ void IJvmProxy.Init(JNIEnv env, JniLocalHandle obj)
env.DeleteLocalRef(obj);
}
+ void IJvmProxy.InitNoDelete(JNIEnv env, JniLocalHandle obj)
+ {
+ jvmHandle = env.NewGlobalRef(obj);
+ }
+
void IJvmProxy.Copy(JNIEnv env, JniGlobalHandle obj)
{
jvmHandle = obj;
diff --git a/java/lang/Throwable.cs b/java/lang/Throwable.cs
index 883d463..4d2b80f 100644
--- a/java/lang/Throwable.cs
+++ b/java/lang/Throwable.cs
@@ -124,6 +124,11 @@ void IJvmProxy.Init(JNIEnv env, JniLocalHandle obj)
jvmHandle = env.NewGlobalRef(obj);
env.DeleteLocalRef(obj);
}
+
+ void IJvmProxy.InitNoDelete(JNIEnv env, JniLocalHandle obj)
+ {
+ jvmHandle = env.NewGlobalRef(obj);
+ }
void IJvmProxy.Copy(JNIEnv env, JniGlobalHandle obj)
{
diff --git a/jni/IJvmProxy.cs b/jni/IJvmProxy.cs
index 9831f03..4a505a0 100644
--- a/jni/IJvmProxy.cs
+++ b/jni/IJvmProxy.cs
@@ -33,6 +33,8 @@ public interface IJvmProxy : IObject
void Init(JNIEnv env, JniLocalHandle obj);
+ void InitNoDelete(JNIEnv env, JniLocalHandle obj);
+
void Copy(JNIEnv env, JniGlobalHandle obj);
}
}
\ No newline at end of file
diff --git a/jni4net.n.androidmono.csproj b/jni4net.n.androidmono.csproj
index b5ee678..ea18e05 100644
--- a/jni4net.n.androidmono.csproj
+++ b/jni4net.n.androidmono.csproj
@@ -138,7 +138,6 @@
-
@@ -166,7 +165,6 @@
-
diff --git a/utils/Convertor.J2C.strong.cs b/utils/Convertor.J2C.strong.cs
index a21ba9c..2394ea9 100644
--- a/utils/Convertor.J2C.strong.cs
+++ b/utils/Convertor.J2C.strong.cs
@@ -52,7 +52,7 @@ public static object StrongJ2CpUntyped(IntPtr ptr)
}
Class clazz = env.GetObjectClass(obj);
RegistryRecord record = Registry.GetJVMRecord(clazz);
- return record.CreateCLRProxy(env, obj);
+ return record.CreateCLRProxyNoDelete(env, obj);
}
private class ConstructerHelper
@@ -73,7 +73,7 @@ public static TRes StrongJ2CpTyped(IntPtr ptr)
{
var env = JNIEnv.ThreadEnv;
var ret = ConstructerHelper.Create(env);
- (ret as IJvmProxy).Init(env, ptr);
+ (ret as IJvmProxy).InitNoDelete(env, ptr);
return ret;
}
diff --git a/utils/RegistryRecord.cs b/utils/RegistryRecord.cs
index 75c806e..d6f03e8 100644
--- a/utils/RegistryRecord.cs
+++ b/utils/RegistryRecord.cs
@@ -70,6 +70,13 @@ internal IJvmProxy CreateCLRProxy(JNIEnv env, JniLocalHandle obj)
proxy.Init(env, obj);
return proxy;
}
+
+ internal IJvmProxy CreateCLRProxyNoDelete(JNIEnv env, JniLocalHandle obj)
+ {
+ IJvmProxy proxy = CLRConstructor.CreateProxy(env);
+ proxy.InitNoDelete(env, obj);
+ return proxy;
+ }
internal IJvmProxy CopyCLRProxy(JNIEnv env, JniGlobalHandle obj)
{