我開發一個統一(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 == NULL也var2.Equals(空)用的debug.log ()在調用val2.run()之前,但它們都顯示爲'False'。它們不是null。
什麼問題?我應該更改Java端代碼並重新生成dll嗎?
謝謝。
p.s.我的Java端代碼使用java.util.logging.Logger並與其他Java項目相關。 (在將jar轉換爲dll時也會引用它,正如我在問題的第二句中所述)
p.s.2。對不起,但我無法在這裏打開java代碼,因爲它是機密代碼
**我將幾個相關的jar文件轉換成一個dll文件**你不會將jar文件轉換爲dll文件。保持原樣並將其放入資產/插件/ Android中。 **我很抱歉,但我無法在這裏打開java代碼,因爲它是密碼**。製作Java插件的副本,然後將其更改爲與原始代碼不同的東西,然後在此處發佈。您還需要使用run()函數發佈您的Class1和Class2腳本。如果您沒有可用於重現問題的內容,則無法幫助您。目前,你的代碼不完整,沒有足夠的幫助。 – Programmer
@Programmer保持原樣並將其放入Assets/Plugins/Android - >然後我只有在構建目標是Android時纔可以使用它們,不是嗎?我已經嘗試過,包括Android活動 –