2017-03-31 69 views
-2

我試圖讓畫面在畫布上移動。wait()和Thread.sleep()不工作

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: error: unreported exception InterruptedException; must be caught or declared to be thrown Thread.sleep(2000); ^1 error

我真的不明白爲什麼,因爲我已搜查了起來,這是他們把什麼我Thread.sleep()是行不通的。

+1

' 「我真的不明白爲什麼我的Thread.sleep()不工作,因爲我已經搜索了它,這正是他們所做的。」 - 請在這裏顯示一個鏈接到一個高度投票的答案,這將把一個線程在繪畫方法中間休息。你需要的解決方案是一個Swing Timer,而不是'Thread.sleep'。 –

+0

https://docs.oracle.com/javase/tutorial/essential/exceptions/catchOrDeclare.html – shmosel

回答

0

InterruptedException是checked異常,你必須catch,如下所示:

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

但是,正如@Hovercraft突出,在繪畫方法調用sleep是不是一個好的做法。

+1

您正在回答XY問題,而不是真正的問題。在繪畫方法中調用睡眠很糟糕,無論你是否喜歡它並編譯或不編譯它。 –

1

一般來說,在Move方法中使用Thread.sleep()是不好的做法。但是,如果這是你想要做什麼:

這是一個編譯錯誤,抱怨有可能不會被抓到一個例外,嘗試圍繞你的Thread.sleep(2000)用try-catch語句,比如:

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

再次,每個人都在解決編譯問題,但提供了錯誤的建議。 –

+0

@HovercraftFullOfEels你是對的,我編輯了這篇文章,以確保OP理解:) –