HI.Я пишу программу, используя мост jni.net.Мост jni.net является C # оберткой JNI. Проблема: Я создаю объект хеш-карты из c #, используя jni.net bridge .когда я пытаюсь вызвать метод put (object, object) хэш-карты, возникает исключение OutOFMemory;« недостаточно памяти для продолжения выполнения программы » я также ловлю исключение, и когда я проверяю, поставленная операция была успешной или нет, я вызываю метод get (key) и узнаю, что ключ был введен успешно.
Эта ошибка возникает только при попытке установить новую пару значений ключа, если я хочу обновить предыдущее значение ключа без ошибок ....
нужны ваши экспертные мнения.Код приведен ниже
Это код
using System;
using System.Collections.Generic;
using System.Text;
using Jni.Net.Bridge;
namespace JNINetHashTable
{
class HashTable
{
readonly static JClass hastTableClass;
readonly static JClass employeeClass;
readonly static JConstructor empconstr;
readonly static JMethod getName;
readonly static JMethod setName;
readonly static JObject classObject;
readonly static JConstructor constr;
readonly static JMethod put;
readonly static JMethod get;
readonly static JMethod size;
readonly static JMethod remove;
readonly static JMethod clear;
readonly static JMethod getNumber;
readonly static JMethod setNumber;
static JObject empObj;
static HashTable()
{
employeeClass = JClass.ForName("Employee");
Console.WriteLine("Check Point1...!");
empconstr = employeeClass.GetConstructor("()V");
empObj = employeeClass.NewInstance();
setName = employeeClass.GetMethod("setName", "(Ljava/lang/String;)V");
getName = employeeClass.GetMethod("getName", "()Ljava/lang/String;");
getNumber = employeeClass.GetMethod("getNumber", "()I");
setNumber = employeeClass.GetMethod("setNumber", "(I)V");
hastTableClass = JClass.ForName("java/util/HashMap");
constr = hastTableClass.GetConstructor("()V");
classObject = hastTableClass.NewInstance();
put = hastTableClass.GetMethod("put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
get=hastTableClass.GetMethod("get","(Ljava/lang/Object;)Ljava/lang/Object;");
size = hastTableClass.GetMethod("size", "()I");
remove = hastTableClass.GetMethod("remove", "(Ljava/lang/Object;)Ljava/lang/Object;");
clear = hastTableClass.GetMethod("clear", "()V");
}
public void addItem(JString key,int value)
{
empObj = employeeClass.NewInstance();
setName.CallVoid(empObj,key);
setNumber.CallVoid(empObj,value);
int a = getNumber.CallInt(empObj);
JObject obj = put.CallObject(classObject, key, empObj);
Console.WriteLine("Writing Time " + a);
}
public string getItem(JString key)
{
empObj = get.CallObject(classObject,key);
int a = getNumber.CallInt(empObj);
JObject str = getName.CallObject(empObj);
string name = JString.getString(str);
return name+" : "+a;
}
public int hashsize()
{
int a=size.CallInt(classObject);
return a;
}
public bool removeKey(JString key)
{
JObject jo = remove.CallObject(classObject, key);
if (jo != null)
return true;
else return false;
}
public void clearAll()
{
clear.CallVoid(classObject);
}
}
}
JClass - это класс c #, который охватывает jclass класса jni в соответствии с реализацией JNI.net.bridge есть ли другой вопрос, чтобы сделать его более понятным ...?