我正在尝试运行客户端并访问字段来设置/获取值。在脚本启动时,我创建了一个加载了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,但为什么它会得到一个静态字段?
答案 0 :(得分:4)
您似乎没有创建该类的“实例”。您需要调用该类的构造函数,然后在需要时使用该实例。
上面的代码适用于静态字段,因为它们可以从类中访问,即它们不需要实例。