当前位置: 首页 > 知识库问答 >
问题:

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

姚星腾
2023-03-14

我正在开发一个Unity(Unity3D 5.3.5F1)项目,使用IKVM8.1RC0转换成dll的Java库(另外使用VS进行C#开发)

我将几个相关的JAR转换为一个dll文件。转换序列时没有警告或错误。并将它们放入Unity Project的资产文件夹中。

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
    }
}
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)

因此,在调用val2.run()之前,我通过使用debug.log()检查var2==null和var2.equals(null),测试它是否为null,但它们都显示为“false”。它们不为空。

问题出在哪里?我是否应该更改Java端代码并重新生成DLL?

多谢了。

共有1个答案

嵇俊德
2023-03-14

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

 类似资料:
  • 快速总结: 我的IKVM编译的JAR-to-DLL库与.NET项目中的一些方法和类一起工作,但一个特定的库抛出了一个异常,似乎表明我的IKVM.Runtime.jni试图将一个64位地址存储到一个32位变量中,而我希望整个系统是32位的。这会引发IllegalArgumentException。 汇编 首先,我编译log4j JAR: 大约有20个左右的警告处理javax.jms.*和javax.

  • 我很难尝试将我的.jar库转换为.dll并使其通过IKVM框架工作。我编写了一个Java库,由于它已经在几个Java项目中进行了成功的测试,所以运行良好,但我强烈需要.NET的.dll。 启动命令时: 一切都是好的(我也尝试了一个主文件,以确定:它可以工作)。 但是,当我键入: 我得到了很多警告,但它仍然创建了.dll文件。很重要的一点是,所有的警告都与我在项目中没有使用的库有关,但我很确定我在M

  • 本文向大家介绍C++调用C#的DLL实现方法,包括了C++调用C#的DLL实现方法的使用技巧和注意事项,需要的朋友参考一下 SwfDotNet是C#编写的,这是个特别好的读写Swf文件的库。本文讲述了在C++项目中,怎么让C++调用C#的DLL动态链接库文件。 具体的实现步骤如下: 一、创建C# DLL,需要指定应用类型为“类库”,代码: 二、C++客户程序,是个控制台应用,代码: 三、这里有几点

  • 我正在使用IKVM将java jar文件转换为C#DLL。这个jar文件有几个依赖项,我通过-r:reference.dll引用了所有这些依赖项。 类“org.eclipse.swt.widgets.control”是在“org.eclipse.swt.win32.win32.x863.5.2.v3557f.dll”中声明的,在使用ikvm将其编译为DLL时,该类没有错误。 提前致谢

  • 问题内容: 我已经看到了一些关于此的文章,但是到目前为止,我还没有看到任何解决方案。我有一个.jar文件,正在通过IKVM转换为.NET DLL 。我试图找出如何使excel VBA环境中的DLL中的方法可用。这是详细信息。 1.)安装IKVM并将其DLL注册到GAC 2.)运行IKVM创建一个.net .dll(mytest.dll) 3.)注册了新的.dll 4.)从这里我创建了一个VB.NE

  • 问题内容: 我正在将Java用于小型应用程序。这是对现有MFC项目的重写。我需要更改一个现有的dll,以启用使用JNI从Java进行的访问。所有这些Java知识对我来说都是新手,因此当我阅读其他论坛帖子时遇到了一些麻烦,并且感觉比较密集。在现有的dll中,我具有如下功能: 愚蠢的提问时间。如何正确设置它以被Java调用? 我尝试了这个: 我包括jni.h,一切编译正常。但是,当我从Java调用它时