내가 자바 라이브러리를 사용하여 함께 유니티 (Unity3D 5.3.5f1) 프로젝트를 개발하고 있어요에서 호출하는 자바 방법은유니티 + iKVM을은/NullReferenceException이 DLL
(또한 C#을 개발을 위해 VS를 사용하여) iKVM을 8.1 RC0와 DLL로 변환 할 때 관련 jar 파일을 하나의 dll 파일로 변환했습니다. 시퀀스 변환시 경고 또는 오류가 없습니다. 그리고 그것들을 Unity 프로젝트의 Assets 폴더에 넣었습니다.
C에서 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: 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 == 널 또한 var2.Equals (NULL)을 확인하여인지 테스트로는 NullReferenceException 도시()를 호출하기 직전에 모두 '거짓'으로 표시되었습니다. 그들은 null이 아닙니다.
무엇이 문제입니까? Java 사이드 코드를 변경하고 dll을 다시 생성해야합니까?
감사합니다.
p.s. 내 자바 사이드 코드는 java.util.logging.Logger를 사용하고 다른 자바 프로젝트와 관련있다. (내가 질문의 두 번째 문장에서 말했듯이 jar을 dll로 변환 할 때도 참조됩니다)
p.s.2. 죄송합니다. 기밀 코드이기 때문에 여기에서 자바 코드를 열 수 없습니다.
** 여러 관련 jar 파일을 하나의 dll 파일로 변환했습니다. ** jar 파일을 dll로 변환하지 마십시오. 그대로두고 Assets/Plugins/Android에 넣으십시오. ** 죄송 합니다만 기밀 코드이므로 자바 코드를 열 수 없습니다 **. Java 플러그인의 복제본을 만들어 원래 코드와 다른 무언가로 변경 한 다음 여기에 게시하십시오. run() 함수를 사용하여 Class1 및 Class2 스크립트를 게시해야합니다. 문제를 재현하는 데 사용할 수있는 것이없는 경우에는 도움을 줄 수있는 방법이 없습니다. 지금 당장 귀하의 코드는 완전하지 않으며 도움이되지 않습니다. – Programmer
@Programmer 그대로두고 [Assets/Plugins/Android]에 넣습니다. 그런 다음 빌드 대상이 Android 인 경우에만 사용할 수 있습니다. 그렇습니까? 나는 안드로이드 활동이 포함 된 것을 이미 시도했다. –