类型[classname]必须实现继承的抽象方法KeyListener.keyTyped(KeyEvent)

时间:2012-08-26 22:13:44

标签: java keylistener

java:我坚持错误 Pong.Move1类型必须实现继承的抽象方法  KeyListener.keyTyped(KeyEvent)当我使用keyListener时。我不知道这意味着什么?帮助?

这是我遇到麻烦的线程......

private class Move1 extends Thread implements KeyListener{
  public void run(){
    addKeyListener(this);
    while(true){
      //hitRight makes you lose.
      //point is how many times it ricochets.
      if(ball.intersects(borderRight)){
        hitRight = true;
      }
      if(ball.intersects(borderLeft)){
        point++;
      }
  }

}
public void keyPressed(KeyEvent event){
while(event.getKeyCode()==40||event.getKeyCode()=='s'){
direction = DOWN;
Thread.sleep(500);
}
}
public void KeyReleased(KeyEvent event){

}
public void KeyTyped(KeyEvent event){

}

}

我也被困在Thread.sleep(500);线上了。它说未处理的异常类型InterruptedException 。有帮助吗?谢谢。

哦,我忘记了什么 1:当我尝试运行它时,我得到的错误是:
Exception in thread "main" java.lang.Error: Unresolved compilation problem: at Pong.main(Pong.java:50)。这是public static void main(String[] args)行。我的完整代码在最后,所以你可以看一下(plz)
2:我正在使用日食 3:我基本上是初学者(不是真的)

我的完整代码:

import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.*;

import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.event.EventListenerList;
public class Pong extends JFrame{
    public final int WIDTH = 1000, HEIGHT = 1000;
    final int UP = 1, DOWN = 2;
    boolean hitRight;
    int point = 0;
    int direction;
    Rectangle bg = new Rectangle(0,0,WIDTH,HEIGHT);
    Rectangle borderLeft = new Rectangle(0,0,WIDTH/320,HEIGHT);
    Rectangle borderRight = new Rectangle(WIDTH-WIDTH/320,0,WIDTH/320,HEIGHT);
    Rectangle borderTop = new Rectangle(borderLeft.x,borderLeft.y,WIDTH,HEIGHT/35);
    Rectangle borderBottom = new Rectangle(0,HEIGHT-HEIGHT/320,WIDTH,HEIGHT/320);
    Rectangle ball = new Rectangle(WIDTH/2,HEIGHT/2,WIDTH/64,HEIGHT/64);
    Rectangle board = new Rectangle(WIDTH-WIDTH/160,0,WIDTH/128,HEIGHT/10);
public void paint(Graphics graphics){
super.paint(graphics);
graphics.setColor(Color.BLACK);
graphics.fillRect(bg.x,bg.y,bg.width,bg.height);
graphics.setColor(Color.RED);
graphics.fillRect(borderLeft.x, borderLeft.y, borderLeft.width, borderLeft.height);
graphics.fillRect(borderRight.x, borderRight.y, borderRight.width, borderRight.height);
graphics.fillRect(borderTop.x, borderTop.y, borderTop.width, borderTop.height);
graphics.fillRect(borderBottom.x, borderBottom.y, borderBottom.width, borderBottom.height);
graphics.setColor(Color.WHITE);
graphics.fillRect(ball.x,ball.y,ball.width,ball.height);
graphics.fillRect(board.x,board.y,board.width,board.height);
}
    /**
     * This Pong game made by me.
     * This has no copied code.
     * Any similarities are coincidences.
     * @param args
     */
    /*
     * The constructor.
     */
    public Pong(){
    super("Pong");
    setSize(WIDTH, HEIGHT);
    setVisible(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Pong p = new Pong();
    }
    /*
     * The move thread.
     */
private class Move1 extends Thread implements KeyListener{
    public void run(){
        addKeyListener(this);
            while(true){
        //hitRight makes you lose.
        //point is how many times it ricochets.
    if(ball.intersects(borderRight)){
        hitRight = true;
    }
    if(ball.intersects(borderLeft)){
        point++;
    }
                    }

        }
    public void keyPressed(KeyEvent event){
    while(event.getKeyCode()==40||event.getKeyCode()=='s'){
    direction = DOWN;
    Thread.sleep(500);
    }
    }
    public void KeyReleased(KeyEvent event){

    }
    public void KeyTyped(KeyEvent event){

    }

    }
}
/*
 * End of move thread...
 */

2 个答案:

答案 0 :(得分:2)

与KeyListener相关的第一个错误只是一个大小写错误。在Java中,方法和变量以camelCase命名,并且语言区分大小写,因此您必须将方法定义为keyTyped而不是KeyTyped。这同样适用于keyReleased

至于您的第二个错误,您必须进行必要的更改以处理声明由Thread#sleep引发的InterruptedException。您可以在try - catch块中包围该方法调用。 (但请注意,KeyEvent的键代码永远不会改变,所以你在那里有一个潜在的无限循环。)

我建议在实现密钥监听器时阅读a tutorial或两个。

答案 1 :(得分:0)

为了实现KeyListener,您需要实现该单个接口包含的所有方法。 这些是:

keyPressed
keyDown
keyTyped

为了使用接口,您必须实现所有方法。

此外,Thread.sleep(500)可能会生成异常。 Java基本上要求您在出现问题时处理错误。要做到这一点,你需要一个try ... catch,就像这样:

try
{
    Thread.sleep(500);
}
catch(InterruptedException e)
{
    System.out.println("Error!");
}