我目前正在用Java创建一个口袋妖怪游戏,并且已经开发了几个星期。但是我开始遇到我正在使用的Key Listeners的问题。问题在昨天大约12点钟随机开始,此后情况变得更糟。
public class Key implements KeyListener {
int id = 0;
int id2 = 0;
@SuppressWarnings("deprecation")
public void keyPressed(KeyEvent arg0) {
id = arg0.getKeyCode();
if (id == KeyEvent.VK_ESCAPE) {
Main.frame.dispose();
Main.thread.stop();
Main.thread2.stop();
Main.thread4.stop();
Main.musicthread.stop();
Main.Running = false;
System.out.println("Exited");
return;
}
if (id == KeyEvent.VK_RIGHT) {
Main.right = true;
Main.left = false;
Main.up = false;
Main.down = false;
Main.faceright = true;
Main.faceleft = false;
Main.faceup = false;
Main.facedown = false;
return;
}
else if (id == KeyEvent.VK_LEFT) {
Main.left = true;
Main.right = false;
Main.up = false;
Main.down = false;
Main.faceright = false;
Main.faceleft = true;
Main.faceup = false;
Main.facedown = false;
return;
}
else if (id == KeyEvent.VK_UP) {
Main.up = true;
Main.left = false;
Main.right = false;
Main.down = false;
Main.faceright = false;
Main.faceleft = false;
Main.faceup = true;
Main.facedown = false;
return;
}
else if (id == KeyEvent.VK_DOWN) {
Main.down = true;
Main.left = false;
Main.right = false;
Main.up = false;
Main.faceright = false;
Main.faceleft = false;
Main.faceup = false;
Main.facedown = true;
return;
}
if (id == KeyEvent.VK_S) {
LoadLevel.save();
return;
}
if (id == KeyEvent.VK_1) {
if (!Movement.POKEMONBATTLE) {
debugger.KeyListener.tilechangedown = true;
}
return;
}
if (id == KeyEvent.VK_2) {
if (!Movement.POKEMONBATTLE) {
debugger.KeyListener.tilechangeup = true;
}
return;
}
if (id == KeyEvent.VK_Q) {
if (!Movement.POKEMONBATTLE) {
if(!debugger.KeyListener.debug){
debugger.KeyListener.debug = true;
}
else { debugger.KeyListener.debug = false; }
}
return;
}
arg0.consume();
id = 0;
return;
}
@Override
public void keyReleased(KeyEvent arg0) {
id2 = arg0.getKeyCode();
if (id2 == KeyEvent.VK_1) {
debugger.KeyListener.tilechangedown = false;
return;
}
if (id2 == KeyEvent.VK_2) {
debugger.KeyListener.tilechangeup = false;
return;
}
if (id2 == KeyEvent.VK_UP) {
Main.up = false;
try { Thread.sleep(1); }
catch (InterruptedException e) { e.printStackTrace(); }
return;
}
if (id2 == KeyEvent.VK_DOWN) {
Main.down = false;
try { Thread.sleep(1); }
catch (InterruptedException e) { e.printStackTrace(); }
return;
}
if (id2 == KeyEvent.VK_LEFT) {
Main.left = false;
try { Thread.sleep(1); }
catch (InterruptedException e) { e.printStackTrace(); }
return;
}
if (id2 == KeyEvent.VK_RIGHT) {
Main.right = false;
try { Thread.sleep(1); }
catch (InterruptedException e) { e.printStackTrace(); }
return;
}
arg0.consume();
id2 = 0;
return;
}
@Override
public void keyTyped(KeyEvent e) {}
}
所以基本上,装扮KeyListener崩溃了,不会响应。我知道这不是导致这种情况的任何其他代码。我不认为它是Main类,其中keylistener被添加到JFrame中。我也在使用JPanel,所以如果这有所不同,请告诉我。 另外,代码确实从启动开始,随机崩溃,我不知道为什么,但崩溃中没有模式。 如果你知道造成这种情况的原因,请告诉我,因为这是一个主要问题。 如果我不能尽快修复它,我可能正在编辑世界的一部分,然后它崩溃了,我无法保存它!
编辑: 另外,我没有篡改KeyListeners