NPE与反思

时间:2012-02-12 07:42:00

标签: java reflection nullpointerexception

我正在尝试运行客户端并访问字段来设置/获取值。在脚本启动时,我创建了一个加载了URLClassLoader的客户端类的新实例,并将其分配给gameApplet

现在,下一段代码可以正常工作(访问静态字段):

Class<?> clientClass = clientClassLoader.loadClass("client");
fps = clientClass.getDeclaredField("fpsOn");
fps.setAccessible(true);
fps.set(null, true);

但是,当我尝试访问非静态字段时:

logged = clientClass.getField("loggedIn");
logged.set(gameApplet, true);

我收到此错误

java.lang.NullPointerException
    at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(Unknown Source)
    at sun.reflect.UnsafeBooleanFieldAccessorImpl.set(Unknown Source)
    at java.lang.reflect.Field.set(Unknown Source)
    at launch.run(launch.java:206)
    at java.lang.Thread.run(Unknown Source)

我假设它的实例是null,但为什么它会得到一个静态字段?

1 个答案:

答案 0 :(得分:4)

您似乎没有创建该类的“实例”。您需要调用该类的构造函数,然后在需要时使用该实例。

上面的代码适用于静态字段,因为它们可以从类中访问,即它们不需要实例。