NullPointerExceptionが発生する理由がわかりません:
ERROR [AWT-EventQueue-0] 18:21:05,864 repast.simphony.ui.RSApplication - Error while initializing simulation
java.lang.NullPointerException
at intraCity_Simulator.GlobalScheduler.load_data(GlobalScheduler.java:20)
at intraCity_Simulator.Initialization_Builder.build(Initialization_Builder.java:306)
at repast.simphony.dataLoader.engine.ClassNameContextBuilder.build(ClassNameContextBuilder.java:41)
以下はコードです。クエリは、初期化(コンテキストビルダー)に直接配置すると機能しますが、このコードを別のクラスに配置してコンテキストビルダーで呼び出すと、NullPointerExceptionが報告されます。
public void load_data() {
Context<Object> context = ContextUtils.getContext(this);
Iterable<Object> readers = context.getObjects(DataReader.class);
DataReader this_reader = null;
Query<Object> reader_query = new PropertyEquals<Object>(context, "name", "parcel");
for (Object o : reader_query.query()) {
if (o instanceof DataReader) {
this_reader = (DataReader) o;
}
}
System.out.print(this_reader.getName());
}
コンテキストビルダーでこれを行うと、nullPointerExceptionが報告されます
GlobalScheduler gs = new GlobalScheduler();
context.add(gs);
gs.load_data();
更新:
「Contextcontext = ContextUtils.getContext(this);」という行が見つかりました。動かない。コンテキストはまだnullです。どうして?ただし、クエリにはコンテキストがパラメータとして必要なので、この行が必要です。
ただし、コンテキストをメソッドload_data()に直接渡すという提案に従うと、機能します。
public void load_data(Context context) {
// Context<Object> context = ContextUtils.getContext(this);
DataReader this_reader = null;
System.out.println("context " + context);
Query<Object> reader_query = new PropertyEquals<Object>(context, "name", "parcel");
for (Object o : reader_query.query()) {
System.out.println(o);
if (o instanceof DataReader) {
this_reader = (DataReader) o;
}
}
System.out.print(this_reader.getName());
}
「Contextcontext = ContextUtils.getContext(this);」を使用してコンテキストを識別できないのはなぜですか。?このメソッドは、step()でメソッドとして呼び出された場合は機能しますが、ContextBuilderでメソッドとして呼び出された場合は失敗します。
実際には何がヌルですか?それがなければ、これがrepastの質問なのか、それともnullポインタエラーを修正するだけなのかを判断するのは困難です。後者の場合、どの変数がnullであるか、そしてなぜそうであるかを判断するのは簡単なはずです。
そうは言っても、おそらくこの行は必要ありません
Context<Object> context = ContextUtils.getContext(this);
ContextBuilderで呼び出す場合は、コンテキストをload_data()に渡すだけです。これにより、少なくともコンテキストがnullになるのを防ぐことができます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加