NPE с отражением - PullRequest
       7

NPE с отражением

0 голосов
/ 12 февраля 2012

Я пытаюсь запустить клиент и получить доступ к полям для установки / получения значений. Когда скрипт запускается, я создаю новый экземпляр класса клиента, загруженного с 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)

Я предполагаю, что это экземпляр, который является нулевым, но почему тогда он получает статическое поле?

1 Ответ

4 голосов
/ 12 февраля 2012

Вы, кажется, не создаете «экземпляр» класса. Вам нужно вызвать конструктор класса, а затем использовать экземпляр там, где это необходимо.

Приведенный выше код работает для статических полей, так как они доступны из класса, т.е. они не требуют экземпляра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...