Første
Billeder og tråde serie, Planche nr. 7
Kursus Indhold

Udskrift af : Billeder og tråde

Planche 1 : Billeder og tråde

Planche 2 : Faste billeder

Billeder kan indlæses og placeres i det grafiske objekt

Planche 3 : drawImage-metode

ImageObserver er som regel objektet 'this'

Bemærk - metoden returnerer lige så snart billedet begynder at dannes. Det gøres færdig i en separat tråd.

Planche 4 : Øvelse

Fortsæt opgave 3 Tilføj kursuslogo ('blajava.gif') til applet

Tilpas størrelsen, hvis det ikke passer....

De to velegnede metoder, getImage() og getCodeBase() er metoder defineret i klassen Applet. Det er altså kun klasser, der er udvidet derfra, de kan bruges på.

Planche 5 : Tråde

Tråde (Threads) er letvægtsprocesser i JVM

Der er altid flere tråde igang.

Nogle API (f.eks. getImage() i Applet-klassen) starter automatisk en ny tråd.

Planche 6 : Tråde (2)

Man kan lave en ny tråd i en klasse, ved at gøre den Runnable. 'Runnable' er en speciel (java.lang) interface-klasse. Interface-klasser er abstracte klasse, hvis metoder kan hentes ind i klasser, som udvides fra andre klasser. Her er et skelet:
public class MinApplet extends java.applet.Applet implements Runnable {

    .... Øvrige initialiseringer og metoder 
    Thread traad;  // til at gemme en ny tråd
    ....

    public void start() {  // overskriver metoden start
       if (traad == null) {
          traad = new Thread(this);
          traad.start();  // start den nye tråd
       }
    }

    public void stop() {  // overskriver metoden stop
       if (traad != null) {
          traad.stop();
          traad = null;   // frigiver traad-objektet helt
       }
    }

    public void run() {  // overskriver metoden run
   
       .... applettens egentlige arbejde
    }
}

Når man påstår, at man 'implements' Runnable, checker javac om man har overskrevet de metoder, som klassen Thread skal bruge for at styre trådene.

Bemærk også, at start i dette eksempel er to forskellige metoder. Der er en metode start() i både klassen MinApplet og i klassen Thread! Det samme gælder metoderne stop().

Planche 7 : Appletters "liv"

Alle de metoder, som en klasse udvidet fra Applet kan overskrive: (fremhævet)
/*
 * 1.0 code.
 */

import java.applet.Applet;
import java.awt.Graphics;

public class Simple extends Applet {

    StringBuffer buffer;

    public void init() {
        buffer = new StringBuffer();
        addItem("initializing... ");
    }

    public void start() {
        addItem("starting... ");
    }

    public void stop() {
        addItem("stopping... ");
    }

    public void destroy() {
        addItem("preparing for unloading...");
    }

    void addItem(String newWord) {
        System.out.println(newWord);
        buffer.append(newWord);
        repaint();
    }

    public void paint(Graphics g) {
        //Draw a Rectangle around the applet's display area.
        g.drawRect(0, 0, size().width - 1, size().height - 1);

        //Draw the current string inside the rectangle.
        g.drawString(buffer.toString(), 5, 15);
    }
}

Dette eksempel kan køres.

Bemærk, at javac vil hævde, at der bruges en forældet (deprecated) metode. Den fortæller også, hvordan man skal finde hvilken.


© 2000 BLA*net - Leif E. Andersen, leander@blanet.dk