【问题标题】:Unity+IKVM / NullReferenceException when calling Java method in dllUnity+IKVM / NullReferenceException 在 dll 中调用 Java 方法时
【发布时间】:2016-07-12 06:13:54
【问题描述】:

我正在开发一个 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 == nullvar2.Equals(null) 来测试它是否为空val2.run(),但它们都显示为 'False'。它们不为空。

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

谢谢。

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

p.s.2。抱歉,这里无法打开 java 代码,因为它是机密代码

【问题讨论】:

  • 我把几个相关的jar转成一个dll文件你没有把jar文件转成dll。保持原样并将其放在 Assets/Plugins/Android 中。 很抱歉,我无法在此处打开 java 代码,因为它是机密代码。制作 Java 插件的副本,然后将其更改为与原始代码不同的东西,然后在此处发布。您还需要使用 run() 函数发布 Class1 和 Class2 脚本。如果您没有可用于重现您的问题的东西,则无法为您提供帮助。目前,您的代码不完整,无法获得足够的帮助。
  • @Programmer 保持原样,放在 Assets/Plugins/Android --> 那我只能在构建目标是 Android 时使用它们,不是吗?我已经尝试过包含 Android 活动

标签: java c# unity3d ikvm


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多