Я новичок в Java, и это моя первая программа, за исключением 15 линейных печатных классов. Каждый раз, когда я пытаюсь скомпилировать свой GameTutorial.java, он получает исключение NullPointerException для строки 57 (внутри метода update()). Пожалуйста, мне нужна помощь, потому что я не знаю, что я делаю неправильно. Возможно, это InputHandler.class, поэтому я тоже написал его.Java NullPointerException on KeyEvent
GameTutorial:
import input.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Graphics;
import java.awt.Color;
import javax.swing.JFrame;
import java.awt.image.BufferedImage;
public class GameTutorial extends JFrame{
InputHandler input;
public static void main(String[] args){
GameTutorial game = new GameTutorial();
game.run();
System.exit(0);
};
static int x=10;
static int windowHeight=600;
static int windowWidth=1200;
static BufferedImage backBuffer = new BufferedImage(windowWidth, windowHeight, BufferedImage.TYPE_INT_RGB);
public void run(){
boolean isRunning = true;
initialize();
while(isRunning){
long time = System.currentTimeMillis();
update();
draw();
time = (1000/30) - (System.currentTimeMillis() - time);
if (time > 0) {
try{
Thread.sleep(time);
}
catch(Exception e){};
};
};
setVisible(false);
};
public void initialize(){
setTitle("Game Tutorial");
setSize(windowWidth, windowHeight);
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
};
public void update(){
if (input.isKeyDown(KeyEvent.VK_RIGHT)){
x += 5;
}
if (input.isKeyDown(KeyEvent.VK_LEFT)){
x -= 5;
}
};
public void draw(){
Color white = Color.WHITE;
Color black = Color.BLACK;
Graphics g = getGraphics();
Graphics bbg = backBuffer.getGraphics();
bbg.setColor(Color.WHITE);
bbg.fillRect(0, 0, windowWidth, windowHeight);
bbg.setColor(Color.BLACK);
bbg.drawOval(x, 100, 20, 20);
g.drawImage(backBuffer, 0, 0, this);
};
}
InputHandler:
package input;
import java.awt.Component;
import java.awt.event.*;
public class InputHandler implements KeyListener{
static boolean[] keys = new boolean[256];
public InputHandler(Component c){
c.addKeyListener(this);
}
public boolean isKeyDown(int keyCode){
if (keyCode > 0 && keyCode < 256){
keys[keyCode]=true;
return keys[keyCode];
}
return false;
}
public void keyPressed(KeyEvent e){
if (e.getKeyCode() > 0 && e.getKeyCode() < 256){
keys[e.getKeyCode()] = true;
}
}
public void keyReleased(KeyEvent e){
if (e.getKeyCode() > 0 && e.getKeyCode() < 256){
keys[e.getKeyCode()] = false;
}
}
public void keyTyped(KeyEvent e){}
}
Использование API привязки ключевых слов к KeyListener и сохранить ваши проблемы, связанные с проблемами фокуса, и KeyListeners – MadProgrammer
Какой учебник по учебному курсу вы используете? –
Этот: http://compsci.ca/v3/viewtopic.php?t=25991 – gabzerbinato