MezData-Logo

Spinnen mit Leben füllen

Die SpiderBox wird um Threads erweitert

Quellcode [spider-v1_2_bluej/SpiderBox.java]
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) 2021
 * 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 koennen
       public void windowClosing(WindowEvent e) {
         System.exit(0);
       }
    }); 
  }  
}
 
class MyPanel extends JPanel implements Runnable { // zusaetzliche Schnittstelle Runnable
  private JLabel versi = new JLabel("Spider 1.2 (c) Oliver Mezger");
  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.

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.

Implementieren Sie den Thread und erweitern Sie die Spider-Klasse um die Methode leben(). Die Spinnen sollen auf den blauen Punkt zulaufen. Lösung anzeigen..

Projekt-Lösungen: [spider-v1_2_bluej.zip] [spider-v1_2_intellij.zip]

Beispiel-Sequenzdiagramm für den Thread

Sequenzdiagramm

Erstellt mit Umlet: [https://www.umlet.com] [Spider12-Sequenzdiagramm.uxf]