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) 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
Erstellt mit Umlet: [https://www.umlet.com] [Spider12-Sequenzdiagramm.uxf]