Я занимаюсь разработкой проекта в Unity (Unity3D 5.3.5f1) с использованием библиотеки Java преобразуется в DLL с IKVM 8.1 RC0 (Кроме того, используя VS для с развитием #)Unity + IKVM/NullReferenceException при вызове метода Java в DLL
Я преобразовал несколько связанных банок в один файл dll. Не было никаких предупреждений или ошибок при преобразовании последовательности. И я поместил их в папку «Активы» в проекте «Единство».
Я попытался запустить свой код Java на C#.
Это мой C# код, где выполняется Java логик (на самом деле сократить много)
using UnityEngine;
using com.mypackage.hierarchy1;
using com.mypackage.hierarchy2; // Same as the package name from Java
public class Test : MonoBehaviour {
...... // several variables
private Class1 var1;
private Class2 var2;
// note that, Class1 and Class2 are the same name used in Java
void Start() {
var1 = new Class1();
var2 = new Class2();
}
void Update() {
method1(certain_param_in_int);
}
......
void method1(int param) {
method2(param, param2, param3,...);
}
void method2(int param, string param2, int param3, int param4) {
var1.method_v1(param, param2,...); // Works well with no problem
var2.initialize("str", var1.getResult(), "anotherstr");
var2.run(); // This method occurs the problem
}
}
Проблема заключается в том, что, когда var2.run() выполняется. метод из var1 не имеет проблем. Я проверил результат правильно. Во всяком случае, var2.run() показывает NullReferenceException ниже
NullReferenceException: Object reference not set to an instance of an object
com.mypackage.hierarchy2.Class2.run()
Test.method2 (Int32 param, System.String param2, Int32 param3, Int32 param4) (at Assets/Scripts/Test.cs:93)
Test.method1 (Int32 param) (at Assets/Scripts/Test.cs:66)
Test.Update() (at Assets/Scripts/Test.cs:33)
Итак, я проверил, является ли его недействительным или не проверяя var2 == NULL и также var2.Equals (нуль) с debug.log() перед вызовом val2.run(), но все они показали «False». Они не равны нулю.
В чем проблема? Должен ли я изменить код Java и повторно сгенерировать dll?
Спасибо.
p.s. В моем боковом коде java используется java.util.logging.Logger и связан с другим проектом java. (на который также ссылаются при преобразовании jar в dll, как я сказал во втором предложении вопроса)
p.s.2. Извините, но здесь я не могу открыть коды Java, потому что это конфиденциальный код
** Я преобразовал несколько связанных ящиков в один файл dll ** Вы не конвертируете файл jar в dll. Оставьте его как есть и поместите его в Assets/Plugins/Android. ** Извините, но я не могу открыть здесь коды Java, потому что это конфиденциальный код **. Сделайте реплику плагина Java, а затем измените ее на то, что делает что-то отличное от исходного кода, а затем опубликуйте здесь. Вам также нужно разместить свои скрипты Class1 и Class2 с помощью функции run(). Невозможно помочь вам, если у вас нет того, что можно использовать для воспроизведения вашей проблемы. Прямо сейчас, ваш код в полном объеме и недостаточно, чтобы получить помощь. – Programmer
@Programmer Оставьте это как есть и поместите его в Assets/Plugins/Android -> Тогда я могу использовать их только тогда, когда целью сборки является Android, не так ли? Я попробовал, что уже с активностью Android включен –