Unity+IKVM / 在dll中调用Java方法时出现NullReferenceException
Unity+IKVM / NullReferenceException when calling Java method in dll
我正在开发一个 Unity(Unity3D 5.3.5f1) 项目,使用 Java 库转换为带有 IKVM 8.1 RC0 的 dll(另外使用 VS 进行 c# 开发)
我把几个相关的jar文件转成了一个dll文件。转换序列时没有警告或错误。我把它们放在 Unity 项目的 Assets 文件夹中。
我尝试在 C# 中 运行 我的 java 代码。
这是我的 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(null)[=35= 来测试它是否为 null ] 在调用 val2.run() 之前用 Debug.Log(),但它们都显示 'False'。它们不为空。
问题是什么?我应该更改 Java 副代码并重新生成 dll 吗?
谢谢。
p.s。我的 java 副代码使用 java.util.logging.Logger 并与其他 java 项目相关。 (jar转dll时也引用了,问题第二句我说了)
p.s.2。抱歉,我无法在此处打开 java 代码,因为它是机密代码
我发现这是我们自己代码的错误,而不是java代码本身。配置。
我正在开发一个 Unity(Unity3D 5.3.5f1) 项目,使用 Java 库转换为带有 IKVM 8.1 RC0 的 dll(另外使用 VS 进行 c# 开发)
我把几个相关的jar文件转成了一个dll文件。转换序列时没有警告或错误。我把它们放在 Unity 项目的 Assets 文件夹中。
我尝试在 C# 中 运行 我的 java 代码。
这是我的 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(null)[=35= 来测试它是否为 null ] 在调用 val2.run() 之前用 Debug.Log(),但它们都显示 'False'。它们不为空。
问题是什么?我应该更改 Java 副代码并重新生成 dll 吗?
谢谢。
p.s。我的 java 副代码使用 java.util.logging.Logger 并与其他 java 项目相关。 (jar转dll时也引用了,问题第二句我说了)
p.s.2。抱歉,我无法在此处打开 java 代码,因为它是机密代码
我发现这是我们自己代码的错误,而不是java代码本身。配置。