我开发一个统一(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活动 –