-4

java: keyListener を使用したときに、型 Pong.Move1 が継承された抽象メソッド KeyListener.keyTyped(KeyEvent) を実装する必要があります。意味がわからない?ヘルプ?

これが私が問題を抱えているスレッドです...

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);ラインで立ち往生しています。Unhandled例外タイプ 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: 私は eclipse を使用しています。
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...
 */
4

2 に答える 2

2

KeyListener に関連する最初のエラーは、単なるケース エラーです。Java では、メソッドと変数はcamelCasekeyTypedに従って名前が付けられ、言語では大文字と小文字が区別されるため、メソッドをではなくとして定義する必要がありますKeyTyped。についても同様ですkeyReleased

InterruptedException2 番目のエラーについては、Thread#sleep によってスローされる宣言を処理するために必要な変更を行う必要があります。そのメソッド呼び出しをtry - catchブロックで囲むことができます。(ただし、KeyEvent のキーコードは変更されないため、潜在的な無限 while ループがあることに注意してください。)

キー リスナーの実装に関するチュートリアルを 1 つか 2 つ読むことをお勧めします。

于 2012-08-26T22:27:22.023 に答える
0

KeyListener を実装するには、個々のインターフェースに含まれるすべてのメソッドを実装する必要があります。これらは:

keyPressed
keyDown
keyTyped

インターフェイスを使用するには、すべてのメソッドを実装する必要があります。

また、Thread.sleep(500) で例外が発生する場合があります。Java では基本的に、何か問題が発生した場合に備えてエラーを処理する必要があります。これを行うには、次のように try...catch が必要です。

try
{
    Thread.sleep(500);
}
catch(InterruptedException e)
{
    System.out.println("Error!");
}
于 2012-08-26T22:32:35.390 に答える