でJavaメソッドを呼び出すときに、私はJavaライブラリを使用してユニティ(Unity3D 5.3.5f1)プロジェクトはIKVM 8.1 RC0(さらにC#の開発のためのVSを使用して)ユニティ+ IKVM /とNullReferenceException DLL
でDLLに変換開発しています私はいくつかの関連するjarファイルを1つの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: 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)
以下のようにとNullReferenceExceptionを示して、私はそれがVAR2をチェックしてヌルであるかどうかをテストしDEBUG.LOGと== nullのともvar2.Equals(ヌル) ()はval2.run()を呼び出す直前に、すべてがFalseを示していました。彼らはnullではありません。
何が問題ですか? Javaのサイドコードを変更してDLLを再生成する必要がありますか?
ありがとうございました。
p.s.私のJava側のコードは、java.util.logging.Loggerを使用し、他のjavaプロジェクトと関連しています。 (私は質問の2番目の文で言ったように、jarをdllに変換するときにも参照されます)
p.s.2。申し訳ありませんが、機密コードなのでここでjavaコードを開くことはできません
**関連する複数のjarを1つのdllファイルに変換しました。** jarファイルをdllに変換しません。それをそのまま残して、Assets/Plugins/Androidに入れてください。 **申し訳ありませんが、私はjavaコードを機密コード**のためオープンできません。 Javaプラグインのレプリカを作成し、元のコードとは異なる何かに変更して、ここに投稿してください。 run()関数でClass1とClass2のスクリプトをポストする必要もあります。あなたの問題を再現するために使用できるものがない場合、あなたを助ける方法はありません。今のところ、あなたのコードは完成しておらず、助けを得るには十分ではありません。 – Programmer
@Programmerそれをそのまま残して、Assets/Plugins/Android - >に入れてください。そして、ビルドターゲットがAndroidの場合にのみ使用できます。 Androidのアクティビティを含む –