2017-03-31 2 views
-2

Ich versuche, das Bild über eine Leinwand zu bewegen.wait() und Thread.sleep() Nicht arbeiten

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


} 

Die Konsole kehrt dann

GraphicsProgram.java:43: error: unreported exception InterruptedException; must be caught or declared to be thrown Thread.sleep(2000); ^1 error

Ich kann wirklich nicht verstehen, warum meine Thread.sleep() nicht funktioniert, wie ich es gesucht und das ist genau das, was sie setzen.

+1

' "Ich kann wirklich nicht verstehen, warum meine Thread.sleep() nicht funktioniert, da ich sie durchsucht habe und genau das haben sie getan." - Bitte zeigen Sie hier einen Link zu einer hoch bewerteten Antwort, die einen Thread setzt .schlaf in der Mitte einer Malmethode. Die Lösung, die Sie brauchen, ist ein Swing Timer, nicht 'Thread.sleep'. –

+0

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

Antwort

0

InterruptedException ist eine geprüfte Ausnahme und man muss es catch wie unten dargestellt:

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

Aber, wie @Hovercraft hervorgehoben, schlafen in der Malerei Aufruf der Methode ist keine gute Praxis.

+1

Sie beantworten das XY-Problem, nicht das eigentliche Problem. Sleep in der Malmethode zu nennen ist schlecht, egal ob du es schaffst und es kompilierst oder nicht. –

1

Im Allgemeinen ist es eine schlechte Methode, Thread.sleep() innerhalb der Methode zu verwenden. Aber, wenn es das ist, was Sie zu tun beabsichtigen:

Dies ist ein Übersetzungsfehler beschweren, dass eine Ausnahme gibt es, die nicht gefangen bekommen könnten, versuchen Sie Ihre Umgebung Thread.sleep(2000) mit einer Try-catch-Anweisung, Beispiel:

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

Wieder repariert jeder das Kompilierungsproblem, gibt aber die falschen Vorschläge. –

+0

@HovercraftFullOfEels Sie sind richtig, ich habe den Beitrag bearbeitet, um sicherzustellen, dass OP versteht :) –

Verwandte Themen