2016-07-12 14 views
0

내가 자바 라이브러리를 사용하여 함께 유니티 (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. 죄송합니다. 기밀 코드이기 때문에 여기에서 자바 코드를 열 수 없습니다.

+0

** 여러 관련 jar 파일을 하나의 dll 파일로 변환했습니다. ** jar 파일을 dll로 변환하지 마십시오. 그대로두고 Assets/Plugins/Android에 넣으십시오. ** 죄송 합니다만 기밀 코드이므로 자바 코드를 열 수 없습니다 **. Java 플러그인의 복제본을 만들어 원래 코드와 다른 무언가로 변경 한 다음 여기에 게시하십시오. run() 함수를 사용하여 Class1 및 Class2 스크립트를 게시해야합니다. 문제를 재현하는 데 사용할 수있는 것이없는 경우에는 도움을 줄 수있는 방법이 없습니다. 지금 당장 귀하의 코드는 완전하지 않으며 도움이되지 않습니다. – Programmer

+0

@Programmer 그대로두고 [Assets/Plugins/Android]에 넣습니다. 그런 다음 빌드 대상이 Android 인 경우에만 사용할 수 있습니다. 그렇습니까? 나는 안드로이드 활동이 포함 된 것을 이미 시도했다. –

답변

0

자바 코드 자체는 아니지만 자체 코드의 오류였습니다. 구성.