Java 等待()并执行线程。睡眠()不起作用

Java 等待()并执行线程。睡眠()不起作用,java,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){ //G

我试图让图片在画布上移动

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);
      }


}
然后控制台返回

java:43:错误:未报告的异常 中断异常;必须被抓住或宣布被抛出 《睡眠》(2000年); ^1错误


我真的不明白为什么我的
线程.sleep()
无法正常工作,因为我已经搜索了它,这正是他们放置的内容。

中断异常是一个选中的异常,您必须
捕获它,如下所示:

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

但是,正如@Hovercraft所强调的,在绘画方法中调用睡眠并不是一个好的实践

一般来说,在
Move
方法中使用
Thread.sleep()
是不好的做法。但是,如果你打算这么做:

这是一个编译错误,抱怨可能无法捕获异常,请尝试使用try-catch语句围绕
线程。sleep(2000)
,例如:

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

“代码>”我真的不明白为什么我的线程。睡眠()不工作,因为我已经搜索了,这正是他们所做的。“< /代码> -请显示一个链接到一个高度表决的答案这里,把线程。睡眠在绘画方法的中间。您需要的解决方案是一个摆动计时器,而不是
线程。sleep
。您回答的是XY问题,而不是真正的问题。在绘画方法中调用sleep是不好的,不管你是否对它进行了修饰和编译。同样,每个人都在修复编译问题,但给出了错误的建议。@HoverCraftfullOfels你是正确的,我编辑了这篇文章以确保OP理解:)