2016-07-12 35 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代码本身。配置。