2016-07-12 50 views
0

我開發一個統一(Unity3D 5.3.5f1)項目使用Java庫調用Java方法轉換成DLL與IKVM 8.1 RC0(另外使用VS爲C#開發)團結+ IKVM/NullReferenceException異常時DLL

我將幾個相關的jar文件轉換成一個dll文件。轉換序列時沒有警告或錯誤。我把它們放在Unity項目的Assets文件夾中。

我試圖在C#中運行我的java代碼。

這是我在那裏執行的Java邏輯的C#代碼(實際上縮短了很多)

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 == NULLvar2.Equals(空)用的debug.log ()在調用val2.run()之前,但它們都顯示爲'False'。它們不是null。

什麼問題?我應該更改Java端代碼並重新生成dll嗎?

謝謝。

p.s.我的Java端代碼使用java.util.logging.Logger並與其他Java項目相關。 (在將jar轉換爲dll時也會引用它,正如我在問題的第二句中所述)

p.s.2。對不起,但我無法在這裏打開java代碼,因爲它是機密代碼

+0

**我將幾個相關的jar文件轉換成一個dll文件**你不會將jar文件轉換爲dll文件。保持原樣並將其放入資產/插件/ Android中。 **我很抱歉,但我無法在這裏打開java代碼,因爲它是密碼**。製作Java插件的副本,然後將其更改爲與原始代碼不同的東西,然後在此處發佈。您還需要使用run()函數發佈您的Class1和Class2腳本。如果您沒有可用於重現問題的內容,則無法幫助您。目前,你的代碼不完整,沒有足夠的幫助。 – Programmer

+0

@Programmer保持原樣並將其放入Assets/Plugins/Android - >然後我只有在構建目標是Android時纔可以使用它們,不是嗎?我已經嘗試過,包括Android活動 –

回答

0

我發現這是我們自己的代碼的錯誤,而不是java代碼本身。配置。