【发布时间】: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 == null 和 var2.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 活动