2016-07-12 6 views
0

Я занимаюсь разработкой проекта в 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, потому что это конфиденциальный код

+0

** Я преобразовал несколько связанных ящиков в один файл dll ** Вы не конвертируете файл jar в dll. Оставьте его как есть и поместите его в Assets/Plugins/Android. ** Извините, но я не могу открыть здесь коды Java, потому что это конфиденциальный код **. Сделайте реплику плагина Java, а затем измените ее на то, что делает что-то отличное от исходного кода, а затем опубликуйте здесь. Вам также нужно разместить свои скрипты Class1 и Class2 с помощью функции run(). Невозможно помочь вам, если у вас нет того, что можно использовать для воспроизведения вашей проблемы. Прямо сейчас, ваш код в полном объеме и недостаточно, чтобы получить помощь. – Programmer

+0

@Programmer Оставьте это как есть и поместите его в Assets/Plugins/Android -> Тогда я могу использовать их только тогда, когда целью сборки является Android, не так ли? Я попробовал, что уже с активностью Android включен –

ответ

0

Я обнаружил, что это была ошибка нашего собственного кода, но не самого Java-кода. конфигурации.