wait()和Thread.sleep()不工作

时间:2017-03-31 20:57:59

标签: java

我试图让画面在画布上移动。

import java.awt.*; class GraphicsProgram extends Canvas{

static int up = 0;



    public GraphicsProgram(){
        setSize(700, 700);
        setBackground(Color.white);
    }

    public static void main(String[] argS){

         //GraphicsProgram class is now a type of canvas
          //since it extends the Canvas class
          //lets instantiate it
         GraphicsProgram GP = new GraphicsProgram();   
        //create a new frame to which we will add a canvas
        Frame aFrame = new Frame();
        aFrame.setSize(700, 700);

        //add the canvas
        aFrame.add(GP);

        aFrame.setVisible(true);

    }

    public void paint(Graphics g){


        Image img1 = Toolkit.getDefaultToolkit().getImage("Code.jpg"); 
        g.drawImage(img1, up, up, this);         }

public void  Move() {   up = up + 1;    Move();


    Thread.sleep(2000);
      }


}

然后控制台返回

  

GraphicsProgram.java:43:错误:未报告的异常   InterruptedException的;必须被抓住或宣布被抛出       了Thread.sleep(2000);                   ^ 1错误

我真的不明白为什么我的Thread.sleep()没有工作,因为我已经搜索过了,这正是他们所说的。

2 个答案:

答案 0 :(得分:1)

通常,在Thread.sleep()方法中使用Move是不好的做法。但是,如果这是你打算做的事情:

这是一个编译错误,抱怨可能没有被捕获的异常,请尝试使用try-catch语句围绕Thread.sleep(2000),例如:

try {
    Thread.sleep(2000);
} catch (InterruptedException e) {
    e.printStackTrace();
}

答案 1 :(得分:0)

InterruptedException是经过检查的例外情况,您必须catch,如下所示:

try {
    Thread.sleep(2000);
} catch (InterruptedException e) {
    e.printStackTrace();
}

但是,正如@Hovercraft强调的那样,在绘画方法中调用睡眠不是一个好习惯。