在dll中调用Java方法时Unity + IKVM / NullReferenceException

时间:2016-07-12 06:13:54

标签: java c# unity3d ikvm

我正在开发一个Unity(Unity3D 5.3.5f1)项目,使用使用IKVM 8.1 RC0转换为dll的Java库(另外使用VS进行c#开发)

我将几个相关的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)

所以,我在调用之前通过Debug.Log()检查 var2 == null 以及 var2.Equals(null)来测试它是否为null val2.run(),但所有这些都显示为'False'。它们不是空的。

有什么问题?我应该更改Java端代码并重新生成DLL吗?

感谢。

P.S。我的java端代码使用java.util.logging.Logger并与其他java项目相关。 (正如我在问题的第二句中所说的那样,将jar转换为dll时也会引用)

p.s.2。对不起,我不能在这里打开java代码,因为它是机密代码

1 个答案:

答案 0 :(得分:0)

我发现这是我们自己的代码的错误,但不是java代码本身。配置。