重复:无法从上下文生成器中的另一个类调用方法

时间:2019-11-07 10:26:24

标签: repast-simphony

我不知道为什么会出现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();

更新:

我只找到“ 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中作为方法调用时,此方法将失败。

1 个答案:

答案 0 :(得分:3)

那里实际上是空的吗?没有它,很难分辨这是一个否定问题还是仅修复了空指针错误。如果是后者,则应该很容易确定什么变量为null,然后确定为什么为null。

也就是说,您可能不需要此行

Context<Object> context = ContextUtils.getContext(this);

如果要在ContextBuilder中调用它-只需将上下文传递给load_data()。这样至少可以避免上下文为空。