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...
*/
答案 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!");
}