2008-12-22 7 views
-1

De toutes ces méthodes, que fait-on et dans quel ordre? Je suppose que la première question à poser est ce qui est en cours d'exécution en premier?Java: Dans quel ordre les méthodes sont-elles appelées dans une applet?

Et pourquoi th.start() démarre-t-il()?

import java.applet.*; 
import java.awt.*; 

import javax.swing.JFrame; 

public class BallApplet extends Applet implements Runnable { 
    int x_pos = 10; 
    int y_pos = 100; 
    int radius = 20; 

    private Image dbImage; 
    private Graphics dbG; 

    public void init() { 
     // setBackground(Color.BLUE); 
    } 

    public void start() { 
     Thread th = new Thread (this); 
     th.start(); 
    } 
    public void stop() {} 
    public void destroy() {} 

    public void run() { 
     // 20 second delay per frame refresh (animation doesn't 
     // need to be perfectly continuous)  
     Thread.currentThread().setPriority(Thread.MIN_PRIORITY); 

     while (true) { 
      x_pos++; 
      repaint(); 
      try { 
       Thread.sleep(20); 
      } 
      catch (InterruptedException ex) { 
       System.out.println("Caught!"); 
      } 
      Thread.currentThread().setPriority(Thread.MAX_PRIORITY); 
     } 
    } 
    public void update(Graphics g) { 
     // implements double buffering 
     // drawing on doublebufferImage, note the dbG=dbImage.getGraphics(), so everything dbG.whatever() is 
     //  drawing on the Image's graphics which is later drawn with g.drawImage() 

     // initialize buffer 
     if (dbImage == null) { 
      dbImage = createImage (this.getSize().width, this.getSize().height); 
      dbG = dbImage.getGraphics(); 
     } 

     // clear screen in background 
     dbG.setColor(getBackground()); // gets background color 
     dbG.fillRect(0, 0, this.getSize().width, this.getSize().height); 

     // draw elements in background 
     dbG.setColor(getForeground()); 
     paint(dbG); 

     // draw image on the screen 
     g.drawImage(dbImage, 0, 0, this); 
    } 
    public void paint(Graphics g) { 
     g.setColor(Color.RED); 
     g.fillOval(x_pos-radius, y_pos-radius, 2*radius, 2*radius); 
    } 
} 
+0

Pouvez-vous être plus clair sur le but de coller du code ici? – GustyWind

+0

Quelle est la question? – Bombe

+0

le Thread a été créé avec "this", qui est un objet qui implémente l'interface "Runnable". Thread.start() est défini par _defined_ pour créer un nouveau thread d'exécution, puis appelle la méthode run() sur l'objet d'origine. – Alnitak

Répondre

4

Les méthodes init() et start() sont invoquées en premier.

Cela crée à son tour Thread et démarre ce thread, ce qui provoque l'appel de la méthode run() de cette classe.

La méthode paint() est appelée par Swing de manière indépendante dans le thread de gestion d'événements GUI, si Swing détecte que l'applet doit être redessinée.

Je remarque que la méthode principale run() de la classe appelle également de façon répétée repaint(). Cela indique explicitement au thread GUI d'appeler update().

3

Le navigateur ou l'afficheur Applet appelle première méthode

  • init() pour informer cette applet qu'il a été chargé dans le système.
  • après l'initialisation de la méthode init start(). Pour plus d'informations, consultez les documents de la classe Applet.
  • A l'intérieur de la méthode start(), il y a un appel à th.start(). Cela signifie commencer() l'exécution du thread
  • qui provoquera la course() pour obtenir invoqué
0

Voir Thread.start().

public void start() 

Causes ce fil pour commencer l'exécution; la machine virtuelle Java appelle la méthode run de ce thread.

Le résultat est que les deux fils sont exécutés en même temps : le fil courant (ce qui revient de l'appel à la méthode de démarrage) et l'autre fil (qui exécute son mode d'exécution). Il est jamais légal de démarrer un thread plusieurs fois. En particulier, un thread ne peut pas être redémarré une fois que a terminé l'exécution.

3

Dans la section Life Cycle of an Applet de The Java Tutorials, les méthodes « s suivantes Applet sont appelés dans l'ordre:

  1. init()
  2. start()
  3. stop()
  4. destroy()

En outre, le code implémente l'interface Runnable, la méthode de run()BallApplet est également exécutée après une nouvelle Thread (ici, appelé th) est exécuté en appelant la méthode th.start(). (Appel de la méthode Thread.start() démarre un nouveau thread et appelle sa méthode run().)

La section Defining and Starting a Thread de Java Tutoriels a plus d'informations sur Runnable et Thread et comment les discussions sont démarrés en Java.

La méthode run() contient un appel à repaint(), et ceci est une mise à jour déclenchée l'application, il appellera la méthode de update(Graphics g)BallApplet. De plus, le repeint déclenché par le système déclenchera la méthode paint(Graphics g).

Pour plus d'informations sur le repeint dans AWT, voir Painting in AWT and Swing. Pour plus d'informations sur la peinture déclenchée par le système et l'application, voir la section sur System-Triggered vs. App-Triggered Painting.

Questions connexes