0

私はJavaにかなり慣れておらず、厳密なCのような言語にひどく慣れていないため、この問題に頭を悩ませているようには見えません:

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

残念ながら、検索しても建設的な結果は得られません。

PS: 余談ですが、すべてのエンティティに対してグローバルなシングルトン ストレージ ビンを用意することは良い考えですか? InputEvents はおそらく独自のクラスで使用するのが最適ですが、長期的には gfx リソース、敵、アイテムなどを保存する必要があります。それともすべきですか?

4

1 に答える 1

1

eventは確かに null でinputEventsはありません。つまり、初期化されていません。フィールド仕様 ( private ArrayDequeue<InputEvent> inputEvents = new ArrayDequeue<InputEvent>();) またはコンストラクターで初期化できます。

于 2013-07-28T03:26:37.803 に答える