2016-07-12 13 views
0

Ich bin eine Einheit (Unity3D 5.3.5f1) Projektes mit der Verwendung von Java-Bibliothek in dll mit IKVM 8.1 RC0 umgewandelt EntwicklungUnity + IKVM/Nullreferenceexception beim Aufruf von Java-Methode in dll

(Zusätzlich VS für C# Entwicklung mit) Ich konvertierte mehrere verwandte Gläser in eine DLL-Datei. Es gab keine Warnung oder Fehler beim Konvertieren der Sequenz. Und ich habe sie im Ordner Assets im Unity-Projekt abgelegt.

Ich habe versucht, meinen Java-Code in C# auszuführen.

Das ist mein C# -Code, wo Java-Logik ausführt (eigentlich viel verkürzen)

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 
    } 
} 

Das Problem ist, dass, wenn var2.run() ausgeführt wird. Methode von var1 hat kein Problem. Ich überprüfte, ob das Ergebnis korrekt war. Wie auch immer, var2.run() zeigt, wie unten 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) 

Also, ich geprüft, ob es null ist oder nicht, indem geprüft var2 == null und auch var2.Equals (null) mit debug.log() kurz vor dem Aufruf von val2.run(), aber alle zeigten "False". Sie sind nicht null.

Was ist das Problem? Sollte ich Java Seitencode ändern und dll neu generieren?

Danke.

p.s. Mein Java-Seitencode verwendet java.util.logging.Logger und steht in Verbindung mit einem anderen Java-Projekt. (auf die auch verwiesen wird, wenn jar in dll konvertiert wird, wie ich im zweiten Satz der Frage gesagt habe)

S.2. Es tut mir leid, aber ich kann hier keine Java-Codes öffnen, weil es vertraulicher Code ist

+0

** Ich konvertierte mehrere verwandte Gläser in eine DLL-Datei ** Sie konvertieren JAR-Datei nicht in DLL. Lass es so wie es ist und lege es in Assets/Plugins/Android. ** Es tut mir leid, aber ich kann hier keine Java-Codes öffnen, weil es vertraulicher Code ist **. Machen Sie ein Replikat des Java-Plugins und ändern Sie es dann in etwas, das etwas anderes als den ursprünglichen Code tut, und posten Sie es hier. Sie müssen auch Ihre Class1- und Class2-Skripte mit Ihrer run() - Funktion posten. Es gibt keine Möglichkeit, Ihnen zu helfen, wenn Sie nicht über etwas verfügen, mit dem Sie Ihr Problem reproduzieren können. Im Moment ist Ihr Code unvollständig und Sie bekommen nicht genug Hilfe. – Programmer

+0

@Programmer Lassen Sie es so wie es ist und legen Sie es in Assets/Plugins/Android -> Dann kann ich nur verwenden, wenn Build-Ziel ist Android, nicht wahr? Ich habe das schon mit Android-Aktivität ausprobiert –

Antwort

0

Ich fand, dass es ein Fehler unseres eigenen Codes war, aber nicht Java-Code selbst. Konfigurationen.