Mam problem. Gdy próbuję nacisnąć dowolny przycisk wyskakuje mi taki oto błąd:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at com.sarnecki.logics.KeyInput.keyPressed(KeyInput.java:18)
at java.awt.Component.processKeyEvent(Unknown Source)
at javax.swing.JComponent.processKeyEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Wydaje mi się, że jest to związane z wartością handler.object.size() w KeyInput, ponieważ gdy próbuję jej użyć w System.out.println() w KeyInput, to nie działa. W innych miejscach tak.
Problem może być banalny, ale jestem początkujący. Z góry dziękuję za pomoc ;)
//KeyInput
package com.sarnecki.logics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import com.sarnecki.logics.Handler;
public class KeyInput extends KeyAdapter {
Handler handler = new Handler();
public KeyInput(Handler handler){
this.handler = handler;
}
public void keyPressed(KeyEvent e){
int key = e.getKeyCode();
for(int i =0; i < handler.object.size(); i++){
GameObject tempObject = handler.object.get(i);
if(tempObject.getId() == ObjectId.Player){
if(key == KeyEvent.VK_D){
//instrukcje
}
}
}
}
public void keyReleased(KeyEvent e){
}
//Handler
package com.sarnecki.logics;
import java.awt.Graphics;
import java.util.LinkedList;
import com.sarnecki.main.GamePanel;
import com.sarnecki.objects.Block;
public class Handler {
public LinkedList<GameObject> object = new LinkedList<GameObject>();
private GameObject tempObject;
public void update(){
for(int i = 0; i < object.size(); i++){
tempObject = object.get(i);
tempObject.update(object);
}
}
public void draw(Graphics g){
for(int i = 0; i < object.size(); i++){
tempObject = object.get(i);
tempObject.draw(g);
}
}
public void addObject(GameObject object){
this.object.add(object);
}
public void destroyObject(GameObject object){
this.object.remove(object);
}
public void createLevel(){
for(int xx=0; xx < GamePanel.WIDTH*GamePanel.SCALE+32; xx+=64){
addObject(new Block(xx, GamePanel.HEIGHT*GamePanel.SCALE-64, ObjectId.Block));
}
}
}
}