Animation aktualisieren

JavDev

Grünschnabel
Hallo,


meine Applet-Animationen laufen schon richtig. Das Problem ist nur, dass die Schleife wahrscheinlich nur 2 mal durchlaufen wird. Wenn ich z.b. einen Zähler erstelle, der jede Sekunde um 1 hochzählt, dann bleibts bei 2 stehen. Wenn ich dann das Fenster verschiebe, minimiere oder maximiere, läufts wieder nur um 2 weiter usw.
 
Ich weiß jetzt so viel, dass man eben eine reapint() aufrufen muss. Das mache ich allerdings:

Code:
import java.applet.Applet;
public class NewApplet extends Applet implements Runnable
{

   private int x;
   private int y;
   private int cnt = 5;
   private int i;
   private Thread runner;

   public void start() {


    if (runner == null) {


        runner = new Thread(this);
        runner.start();
    }
   }

   public void run()
   {
        Thread thisThread = Thread.currentThread();
        while (runner == thisThread) {


            repaint();
            try {
                Thread.sleep(1000);
                } catch (InterruptedException e) {
                //nichts
            }
        }
        
   }
    public void paint(Graphics g)
   {
      g.drawRect(x,50,10,10);
      x+=5;
   
   }

}
 
Zuletzt bearbeitet:
1) Du speicherst doch nirgends die x ab. O_o"
2) Warum machst du das Applet zu nen Thread? O_o"² Startet doch soundso in der Applet.init() mit der Ausführung.
3) Wenn du sehr oft neu zeichnest kann es besser sein, die paint direkt aufzurufen. In dem Fall musst du dir die Graphics aber aus der BufferStrategie hohlen. Würde ich aber an deiner Stelle sowieso.

€: Ausserdem hat die run() doch nichtmal ne Schleife. O_o
 
1) Ich hab vorher x deklariert und dann speicherts doch in x+=5?
2)Für Animationen benötigt man doch Threads?!
3)das ist mir nue, und hab ich nirgends gesehen. Ich rufe doch paint() mit repaint() auf?!
€) Ja gut. Aber mit einer while-Schleife klappts auch net.


Edit: Hab mal den Code geändert.
 
Zuletzt bearbeitet:
Doch, dein Source jetzt klappt bei mir, wenn ich ihm der Applet-Ansicht von Eclipse (oder ist es direkt von Java? Keine Ahnung.) aufrufe.
Der Block springt jede Sekunde ein wenig nach rechts.

Man braucht keine Thread, mache ich auch manchmal ohne. Man braucht sie nur, wenn man mehrere Dinge "gleichzeitig" ablaufen lassen will.
Und repaint() zeichnet nicht immer neu, wenn es öfters hintereinander aufgerufen wird, was für Anis. manchmal notwendig wird. Aber nur direkt aufrufen wenn es sonst probleme gibt.
 
Zuletzt bearbeitet:
Ich nutze NetBeans. Obiger Code führe ich genauso aus. Das Rechteck beweckt sich auch einmal nach rechts, hört dann aber auf. Wenn ich das Fenster maximiere oder minimiere, gehts wieder...
 
Wenn du obigen Code genau so ausführst stimmt sowieso was nicht, da du Graphics nicht importierst.
Schau mal mit Konsolenausgabe o. ä. (weiß nichtmehr ob NetBeans eine mitliefert) ob die Schleife überhaupt durchrennt.
Da du in der Paint addierst kann das genauso der Fehler sein.
 
Hey cool! Ja am Graphics-Paket lags
Danke!

Aber ist schon komisch: Ich habe mir Eclipse für Java ebne runtergeladen und obigen Code reinkopiert (also ohne Graphics) und da hats gleich funktioniert!
 
Bei mir gäbe es natürlich einen Fehler: java.lang.NoClassDefFoundError: Graphics
Allerdings importiert Eclipse manchmal selbstständig Klassen, wenn man was reinkopiert oder Methoden anlegt o. ä.
 
Zurück