Repast:无法从 Context Builder 中的另一个 class 调用方法
Repast: cannot call method from another class in Context Builder
我不知道为什么会出现 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)
下面是代码。当我将它直接放在初始化(上下文构建器)中时查询有效但是当我将此代码放入另一个 class 并在上下文构建器中调用它时它报告 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();
更新:
我只是发现行 "Context context = ContextUtils.getContext(this);" 不工作。上下文仍然为空。为什么?但是我需要这一行,因为查询需要上下文作为参数。
但是,如果我按照您的建议将上下文直接传递到方法 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());
}
为什么我无法使用 "Context context = ContextUtils.getContext(this);" 识别上下文?如果此方法在 step() 中作为方法调用,则此方法有效,但如果在 Context Builder 中作为方法调用,则此方法失败。
实际上什么是空的?如果没有它,很难判断这是一个就餐问题还是只是修复一个空指针错误。如果是后者,则应该很容易确定哪个变量为空,然后确定为什么为空。
也就是说,您可能不需要这一行
Context<Object> context = ContextUtils.getContext(this);
如果您在 ContextBuilder 中调用它——只需将上下文传递给 load_data()。这至少可以避免上下文为空。
我不知道为什么会出现 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)
下面是代码。当我将它直接放在初始化(上下文构建器)中时查询有效但是当我将此代码放入另一个 class 并在上下文构建器中调用它时它报告 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();
更新:
我只是发现行 "Context context = ContextUtils.getContext(this);" 不工作。上下文仍然为空。为什么?但是我需要这一行,因为查询需要上下文作为参数。
但是,如果我按照您的建议将上下文直接传递到方法 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());
}
为什么我无法使用 "Context context = ContextUtils.getContext(this);" 识别上下文?如果此方法在 step() 中作为方法调用,则此方法有效,但如果在 Context Builder 中作为方法调用,则此方法失败。
实际上什么是空的?如果没有它,很难判断这是一个就餐问题还是只是修复一个空指针错误。如果是后者,则应该很容易确定哪个变量为空,然后确定为什么为空。
也就是说,您可能不需要这一行
Context<Object> context = ContextUtils.getContext(this);
如果您在 ContextBuilder 中调用它——只需将上下文传递给 load_data()。这至少可以避免上下文为空。