2013-07-28 2 views
0

Я довольно новыми для Java и серьезно ржавый на строгих C-подобных языках, так что я не могу обернуть мою голову вокруг этого вопроса:NullPointerException при попытке нажать InputEvent в ArrayDeque

import java.awt.event.InputEvent; 
import java.util.ArrayDeque; 

class DataBase 
{ 
    private ArrayDeque<InputEvent> inputEvents; 
    private static final DataBase instance = new DataBase(); 

    private DataBase() {} 

    public InputEvent pollEventStack() 
    { 
     return inputEvents.poll(); 
    } 

    public boolean pushToEventStack(InputEvent event) 
    { 
     boolean result = false; 
     try { 
      result = inputEvents.add(event); 
     } catch (NullPointerException e) { 
      Debug.log(event.paramString()); // We end up here with valid data in the log. Event is not as null as it claims to be, huh? 

      System.exit(0); 
     } 
     return result; 
    } 

    public static DataBase getInstance() 
    { 
     return instance; 
    } 
} 

Если интересно, вот текущая строка я получаю в журнале:

KEY_PRESSED,keyCode=27,keyText=Escape,keyChar=Escape,keyLocation=KEY_LOCATION_STANDARD,rawCode=27,primaryLevelUnicode=27,scancode=1,extendedKeyCode=0x1b 

Я уверен, что это что-то до смешного просто я пропускаю, к сожалению, поиск дает не конструктивных результатов.

P.S .: В качестве боковой опоры имеется универсальный ящик для хранения данных для всех моих сущностей, даже хорошая идея? InputEvents, вероятно, лучше всего в своем классе, но в конечном итоге это должно хранить ресурсы gfx, врагов, элементов и т. Д. Или это должно быть?

+0

Кстати, вы имели в виду использовать ArrayDeque, или вы нацелились на простой ArraList? – drvdijk

+0

@ drvdijk Учитывая, что это простой стек действий для событий key и mouse, все, что мне нужно - это возможность push и pop. Я не уверен, что ArrayDeque - это правильный путь. Как я уже сказал, Java для меня нова. –

+0

@drvdijk О да, и переменный размер, вероятно, также необходим. Невозможно взломать всю память огромным буфером или слишком низкое ограничение на сохраненные события. Для этого достаточно подходящего для этого места. Какие недостатки мне не хватает? –

ответ

1

event действительно не null, inputEvents есть, он не был инициализирован. Вы можете либо инициализировать его в спецификации поля (private ArrayDequeue<InputEvent> inputEvents = new ArrayDequeue<InputEvent>();), либо в конструкторе.

+0

Ух ... Я ** знал **, это так просто. Теперь чувствуешь себя дураком. Спасибо за быстрый ответ. (Может принимать ответ только через 7 минут) –

+0

Все в порядке, вот что такое StackOverflow, не так ли? Если это ответит на ваш вопрос, вы можете принять его :) – drvdijk

+0

Да, конечно, принято. Извините за задержку, ограничения SO. Кстати, есть ли у вас мнение по вопросу о сноске? Не могу спросить его отдельно. :) –

Смежные вопросы