MezData-Logo Creative Commons License 194 Lösungen Button :JAVA: Spinnen mit Leben füllen: Threads

Die SpiderBox wird um Threads erweitert:

import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.awt.event.*;

/**
 * Title:        spider - SpiderBox
 * Description:  Projekt zur Einfuehrung der Objektorientierten Programmierung
 * Copyright:    Copyright (c) 2005
 * Company:      MezData
 * @author Oliver Mezger
 * @version 1.2
 */

public class SpiderBox extends JFrame {
  private MyPanel mPan = new MyPanel();
 
  public SpiderBox() {
    getContentPane().add(mPan);
    addWindowListener(new WindowAdapter(){  // Objekt soll beendet werden können
       public void windowClosing(WindowEvent e) {
         System.exit(0);
       }
    }); 
  }  
}

class MyPanel extends JPanel implements Runnable { // zusätzliche Schnittstelle Runnable
  private JLabel versi = new JLabel("Spider 1.2 (c) MezData");
  private JButton exit = new JButton("Exit");
  private int ortX= 50,ortY=50;
  private Spider anna = new Spider(100,100,50,Color.red);
  private Spider bert = new Spider(200,200,40,Color.green);
  
  public MyPanel(){
    setBackground(Color.yellow);
    setLayout(new FlowLayout());
    add(versi);
    add(exit);
    exit.addMouseListener(new java.awt.event.MouseAdapter() {
      public void mouseClicked(MouseEvent e) {
        System.exit(0);
      }
    });
    addMouseListener(new java.awt.event.MouseAdapter() {
      public void mousePressed(MouseEvent e) {
        canvas_mousePressed(e);
      }
    });
    Thread liveDaemon = new Thread(this);  // neuen Thread erzeugen
    liveDaemon.start();  // Thread starten
  }
  public void paintComponent(Graphics g)  {
    super.paintComponent(g);
    g.setColor(Color.blue);
    g.fillOval(ortX-6, ortY-6, 12, 12);
    anna.malen(g);
    bert.malen(g);
  }  
  public void canvas_mousePressed(MouseEvent e) {
    ortX=e.getX();
    ortY=e.getY();
    anna.gehezu(ortX,ortY);
    bert.gehezu(ortX,ortY);
    repaint();
  }
  public void run() {// das ist der Thread, hier steckt das Leben drin
    while (true){ // solange immer
      anna.leben();  // anna leben lassen
      bert.leben();  // bert leben lasssen
      repaint();     // neu zeichnen
      try {
        Thread.sleep (500);  // ein wenig schlafen
      }
      catch (InterruptedException ex){
      }
    }  
  }
}

Ergebnis erleben: spider-v1.2.jar

Funktionsweise Threads

Ein Thread ist ein Kind-Prozess, der in dem selben Speicherbereich abläuft wie sein Vater. JAVA-Doku Threads-Interface Runnable

In unserem Fall ist es ein Hintergrunds-Prozess der die leben()-Methode der Spinnen aufruft und sich dann für 500 ms schlafen legt. Damit können sich die Spinnen auch ohne Eingaben selbständig bewegen.

RechneraufgabeImplementieren Sie den Thread und erweitern Sie die Spider-Klasse um die Methode leben(). Die Spinnen sollen auf den blauen Punkt zulaufen.

PapieraufgabeErstellen Sie ein Sequenzdiagramm für den Thread.

Lösung-Projekt: spider-v1.2.zip

 

© Oliver Mezger 31.05.2006 MezData.de Den Kontakt herstellen...