Applets und Threads

Status
Nicht offen für weitere Antworten.

Iome

Mitglied
Wir sollen in der Schule ein Applet erstellen, auf dem Straßen (Kurven, Kreuzungen, Geraden) sind und auf denen Autos fahren.

Nun komme ich einfach nicht weiter. Mein Problem sind die Autos, die gleichzeitig auf der Straße fahren sollen:

Möglichkeit 1 um die Autos fahren zu lassen (Auszug):

Code:
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Color;

public class Kreuzung extends Applet {

	public void init() {
		setLayout(null);
		setSize(600, 600);
		setBackground(Color.lightGray);
	}

	public void paint(Graphics stift) {
		while (true) {
			try {
				for (int i = 0; i <= 600; i++) {
					stift.setColor(Color.red);
					stift.fillRect(i, 315, 150, 100);
					stift.setColor(Color.lightGray);
					stift.fillRect(i, 315, 1, 100);
					Thread.sleep(5);
				}
					break;
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

Vorteil: Nur das Auto (Rechteck) wird aktuallisiert, der Rest des Applets bleibt so wie es ist
Nachteil: Das Programm sitzt während des zeichnens des Autos in einer Endlosschleife und man kann das Applet nicht so einfach beenden oder andere Prozesse gleichzeitig starten.

Also habe ich nach einer weiteren Möglichkeit gesucht, um mehrere Prozesse gleichzeitig abarbeiten zu können:

Möglichkeit 2 (Auszug):
Code:
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Color;

public class Kreuzung extends Applet {
	int i = 0;
	
	public void init() {
		setLayout(null);
		setSize(600, 600);
		setBackground(Color.lightGray);

		Thread t1 = new Thread(new Auto());
		t1.start();
	}
	
	class Auto implements Runnable {
		public void run() {
			while (true) {
				repaint();
				try {
					Thread.sleep(5);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	}
	
	public void paint(Graphics stift) {
		stift.setColor(Farben.rot);
		stift.fillRect(i++, 315, 150, 100);
	}
}
(Das Flackern der einzelnen Frames könnte man noch mit einem DoubleBuffer entfernen)
Voreil: Mehrere Prozesse können gleichzeitig laufen.

Nun zu meiner Frage: Ich würde gerne bei Möglichkeit 2 statt dem ganzen Applet nur meine Autos (Rechtecke) zeichnen.

Ich habe mal die Klasse "Auto" so aufgebaut:
Code:
	class Auto implements Runnable {
		public void run() {
			public void paint(Graphics stift){
				while (true) {
			     	stift.setColor(Color.red);
					stift.fillRect(i++, 315, 150, 100);
				}
				try {
					Thread.sleep(5);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	}
Will aber nicht laufen (Eine Methode in einer anderen Methode geht ja nicht). Würde das aber gerne in der Form haben wollen, weil ich nicht alles neu painten will, sondern nur die Autos!

Hat da jemand eine Idee?
 

Campino

Top Contributor
einfach das public void paint(Graphics stift)..weglassen und den Code direkt in die run() schreiben. Das graphics musst du dir über die getGraphics()-Funktion des Component auf dem du zeichnest holen.

Ich halte es für empfehlenswert einen thread zu machen, der die paint()-Funktionen der aller Autos aufruft, so das nicht jedes Auto einen neuen thread startet. Das ist resourcensparender.
 

Iome

Mitglied
Wie würde dann der Quelltext aussehen?

so: ???
Code:
getGraphics().fillRect(i++, 315, 150, 100);
 

Iome

Mitglied
Er zeichnet jetzt etwas, aber er beachtet meine eingestellte Farbe nicht. Die Farbe meines Rechtecks is immer schwarz obwohl ich rot eingestellt habe. Zudem kommt eine Exception beim Schließen des Programms:

Code:
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Color;

public class Kreuzung extends Applet {
   int i = 0;

   public void init() {
      setLayout(null);
      setSize(600, 600);
      setBackground(Color.lightGray);

      Thread t1 = new Thread(new Auto());
      t1.start();
   }
   
   class Auto implements Runnable {
      public void run() {
         while (true) {
             // ----------------------------------------
            getGraphics().setColor(Color.red);       //<- Diese Zeile ignoriert er scheinbar!
            getGraphics().fillRect(20,20,100,100);
            // -----------------------------------------
            try {
               Thread.sleep(5);
            } catch (InterruptedException e) {
               e.printStackTrace();
            }
         }
      }
   }
   
   public void paint(Graphics stift) {
      stift.setColor(Farben.rot);
      stift.fillRect(i++, 315, 150, 100);
   }
}

Exception (kommt nur wenn ich meine beiden Zeilen mit getGraphics() nehme):

Code:
Exception in thread "Thread-3" java.lang.NullPointerException
	at Ampelsteuerung.Kreuzung$Auto.run(Kreuzung.java: --Zeilen mit getGraphics() --)
	at java.lang.Thread.run(Unknown Source)

Wieso nimmt er jetzt nicht die rote Farbe und warum kommt die Exception beim Schließen des Programms?
 

Illuvatar

Top Contributor
1. Du könntest mal
Code:
 Graphics g = getGraphics();
g.setColor
g.doSomething
probireen, sonst weiß ich nichts.

2. Wenn das Fenster zu ist aber die Schleife noch äuft gibts halt keine Graphics ;)
 

Iome

Mitglied
Programm läuft jetzt:

Hier mal den mein Programm (Auszug, der stark vereinfacht ist!):
Code:
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;

public class Kreuzung extends Applet {
    Color hellgrau = new Color(200, 200, 200);
    Color dunkelgrau = new Color(150, 150, 150);
    Color gelbgruen = new Color(150, 230, 0);
    Color rot = new Color(230, 0, 0);
    Color gelb = new Color(255, 255, 0);
    Color weiss = new Color(255, 255, 255);
    
	public void init() {
		setLayout(null);
		setSize(600, 600);
		setBackground(hellgrau);
		Thread t1 = new Thread(new Auto1());
		t1.start();
		Thread t2 = new Thread(new Auto2());
		t2.start();
	}
 
	class Auto1 implements Runnable {
		public void run() {

			Graphics stift = getGraphics();
			while (true) {
				for (int i = -50; i <= 600; i++) {
					stift.setColor(rot);
					stift.fillRect(i, 315, 150, 100);
					stift.setColor(hellgrau);
					stift.fillRect(i, 315, 1, 100);
					try {
						Thread.sleep(10);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		}
	}
	
	class Auto2 implements Runnable {
		public void run() {

			Graphics stift = getGraphics();
			while (true) {
				for (int i = 500; i >= -150; i--) {
					stift.setColor(gelb);
					stift.fillRect(i, 185, 150, 100);
					stift.setColor(hellgrau);
					stift.fillRect(i + 150, 185, 1, 100);
					try {
						Thread.sleep(5);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		}
	}
	
	public void paint(Graphics stift) {
		// Wiese
		stift.setColor(gelbgruen);
		stift.fillRect(0, 0, 145, 145);
		stift.fillRect(455, 0, 145, 145);
		stift.fillRect(0, 455, 145, 145);
		stift.fillRect(455, 455, 145, 145);

		// Mittelstreifen
		  // Links
		stift.setColor(weiss);
		stift.fillRect(0, 295, 25, 10);
		stift.fillRect(50, 295, 50, 10);
		stift.fillRect(125, 295, 50, 10);
		  // Rechts
		stift.fillRect(425, 295, 50, 10);
		stift.fillRect(500, 295, 50, 10);
		stift.fillRect(575, 295, 25, 10);
		  // Oben
		stift.fillRect(295, 0, 10, 25);
		stift.fillRect(295, 50, 10, 50);
		stift.fillRect(295, 125, 10, 50);
		  // Unten
		stift.fillRect(295, 425, 10, 50);
		stift.fillRect(295, 500, 10, 50);
		stift.fillRect(295, 575, 10, 25);

		// Gehwege
		  // Links-Oben
		stift.setColor(dunkelgrau);
		stift.fillRect(0, 135, 160, 40);
		stift.fillRect(135, 0, 40, 160);
		stift.fillOval(135, 135, 40, 40);
		  // Rechts-Oben
		stift.fillRect(440, 135, 160, 40);
		stift.fillRect(425, 0, 40, 160);
		stift.fillOval(425, 135, 40, 40);
		  // Links-Unten
		stift.fillRect(0, 425, 160, 40);
		stift.fillRect(135, 440, 40, 160);
		stift.fillOval(135, 425, 40, 40);
		  // Rechts-Unten
		stift.fillRect(440, 425, 160, 40);
		stift.fillRect(425, 440, 40, 160);
		stift.fillOval(425, 425, 40, 40);
	}
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Java 8 & Eigene Applets Java Basics - Anfänger-Themen 3
Sogomn Einbinden eines Applets Java Basics - Anfänger-Themen 5
M Erste Schritte applets Java Basics - Anfänger-Themen 7
F Applets signieren. Java Basics - Anfänger-Themen 5
OnDemand Berechnung in die start und paint Methode eines Applets Java Basics - Anfänger-Themen 28
J Applets und getCodeBase() Java Basics - Anfänger-Themen 2
B lokales JRE bei Applets nutzen ? Java Basics - Anfänger-Themen 4
T Die Zukunft von Java Applets sicher? Java Basics - Anfänger-Themen 15
P Applets im Browser Java Basics - Anfänger-Themen 4
SheldoN Sound abspielen nach Buttonklick in Applets Java Basics - Anfänger-Themen 17
S JInternalFrame in Applets? Java Basics - Anfänger-Themen 9
K mehrer applets sollen sich gegenseitig verständigen können Java Basics - Anfänger-Themen 3
F Applets mit Appletloader in lauffähige Datei exportieren Java Basics - Anfänger-Themen 3
N Applets: unterschiedliche Java Versionen Java Basics - Anfänger-Themen 7
N Applets: Objekte vom Server laden Java Basics - Anfänger-Themen 4
L Probleme bei Offline-Nutzung von Java-Applets Java Basics - Anfänger-Themen 6
B Einfache Applets für Webseite Java Basics - Anfänger-Themen 10
M Frage zum Aufruf eines Applets aus einer HTML - Datei Java Basics - Anfänger-Themen 3
B Applets Java Basics - Anfänger-Themen 3
A java cache löschen/ausschalten bzw. Browser Applets entwickeln Java Basics - Anfänger-Themen 9
U Objekte und Applets Java Basics - Anfänger-Themen 9
Semox Fehler in Eclipse vor Start eines Applets anzeigen? Java Basics - Anfänger-Themen 2
S Wo speichere ich Bilder für Applets (Netbeans) Java Basics - Anfänger-Themen 5
A Ausdrucken eines Applets Java Basics - Anfänger-Themen 10
N Applets Java Basics - Anfänger-Themen 2
J java applets bilder? Java Basics - Anfänger-Themen 11
D Grenzen eines Applets Java Basics - Anfänger-Themen 9
Screen Eine Frage zu moueMove in applets und deren Vergleich Java Basics - Anfänger-Themen 11
F Unterschied im Einfügen von Bildern in Applets vs Applications Java Basics - Anfänger-Themen 6
S Java Applets Java Basics - Anfänger-Themen 2
Developer_X !!!Help with Applets!!! PLEASE Java Basics - Anfänger-Themen 14
0 Problem beim Starten des Applets Java Basics - Anfänger-Themen 2
M Anfängerfragen zu Java Applets Java Basics - Anfänger-Themen 4
G Speichern eines Applets (Speichern von Daten - Applikation) Java Basics - Anfänger-Themen 31
C Textausgabe auf Panelen innerhalb eines Applets Java Basics - Anfänger-Themen 6
G Weder IE noch Firefox zeigen mir Java Applets an Java Basics - Anfänger-Themen 5
Tapsi Wichtige Fragen zu Applets Java Basics - Anfänger-Themen 2
H Applets tuts nicht Java Basics - Anfänger-Themen 5
D Applets und jar Java Basics - Anfänger-Themen 6
7 Applets - einfachste Grundlagen Java Basics - Anfänger-Themen 24
M Umlaute in Java Applets? Java Basics - Anfänger-Themen 3
B Java Applets kommunizieren lassen? Java Basics - Anfänger-Themen 6
J 2 Applets zu 1 zusammenfassen? Java Basics - Anfänger-Themen 7
S applets im internet ablaufen lassen Java Basics - Anfänger-Themen 6
S MidiIN bei Applets Java Basics - Anfänger-Themen 3
B Unklarheit bei Applets und Runtime Java Basics - Anfänger-Themen 5
G Wie lass ich Applets anzeigen Java Basics - Anfänger-Themen 6
F Applets und die paint-Methode Java Basics - Anfänger-Themen 3
F Verwenden von Input innerhalb eines Applets Java Basics - Anfänger-Themen 3
M gehen applets auch in .jar dateien? Java Basics - Anfänger-Themen 3
S Verständnisfragen / Textausgabe (Java Applets) Java Basics - Anfänger-Themen 4
G Java Applets Java Basics - Anfänger-Themen 4
G Bilder in den Hintergrund eines Applets einfügen Java Basics - Anfänger-Themen 16
D *.mp3 in Applets nutzen Java Basics - Anfänger-Themen 23
N Thread, Applets & Co. Java Basics - Anfänger-Themen 3
A Problem beim Signieren eines Applets Java Basics - Anfänger-Themen 4
R Noch eine Frage: Breite des Applets im Browser ermitteln Java Basics - Anfänger-Themen 7
G Applets in Frames & Bilder Java Basics - Anfänger-Themen 10
MasterEvil Größe signierter Applets Java Basics - Anfänger-Themen 5
G Transparente Hintergrundfarbe eines Applets Java Basics - Anfänger-Themen 8
X Sind Traffic-Probleme durch Java Applets möglich? Java Basics - Anfänger-Themen 3
T Problem mit Objekten (bei Applets) Java Basics - Anfänger-Themen 6
D Netbeans IDE 5.0 und Applets Java Basics - Anfänger-Themen 4
J Grundsätzliche Fragen zur Anwendung von Applets Java Basics - Anfänger-Themen 12
T Fehler beim Laden eines Applets Java Basics - Anfänger-Themen 16
Chucky Rekursion grafisch darstellen anhand eines Applets Java Basics - Anfänger-Themen 14
J Java Applets schreiben welches JDK wählen? Java Basics - Anfänger-Themen 5
S Probleme bei Applets in HTML Java Basics - Anfänger-Themen 11
I Applets Java Basics - Anfänger-Themen 4
S Application starten / Applets + 3rd Person APIs Java Basics - Anfänger-Themen 10
F Wie kommen die Applets zum Client? Java Basics - Anfänger-Themen 7
P Lokale Dateien in Java-Applets einlesen Java Basics - Anfänger-Themen 2
P meine java applets laufen nicht bei meinen freunden Java Basics - Anfänger-Themen 5
M Java und Applets (Hilfe!!!) Java Basics - Anfänger-Themen 5
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
C Threads und Swing Java Basics - Anfänger-Themen 9
berserkerdq2 Wo finde ich in der Java Api die Notation zu Threads bezüglich Synchronized? Java Basics - Anfänger-Themen 14
berserkerdq2 Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized? Und wie sieht bei Conditions aus? Java Basics - Anfänger-Themen 8
B Monitor als Schranke von Threads Java Basics - Anfänger-Themen 20
W Threads Alphabet Java Basics - Anfänger-Themen 20
H Threads Anfänger Java Basics - Anfänger-Themen 17
1 Threads parallel laufen Java Basics - Anfänger-Themen 11
B Threads Problem mit mehreren Threads Java Basics - Anfänger-Themen 38
M Threads Java Basics - Anfänger-Themen 12
L Threads Synchronisierung zwischen threads Java Basics - Anfänger-Themen 4
M Threads Java Basics - Anfänger-Themen 2
A Threads Java Basics - Anfänger-Themen 9
A Threads Java Basics - Anfänger-Themen 13
A Threads und .join Java Basics - Anfänger-Themen 14
W Threads starten Java Basics - Anfänger-Themen 2
X Threads Zwei Threads, aber doppelte Ausgabe verhindern (synchronized) Java Basics - Anfänger-Themen 54
J Wieviele threads? Java Basics - Anfänger-Themen 9
J Problem bei seriellem Start von Threads Java Basics - Anfänger-Themen 11
O Threads Java Basics - Anfänger-Themen 2
L Buchungssystem und Threads Java Basics - Anfänger-Themen 2
O Threads - Synchronize(), join(), wait(), notify(), yield() Java Basics - Anfänger-Themen 6
L Klassen NFC Reader und JavaFx Problem -> threads? Java Basics - Anfänger-Themen 2
A Kommunikation zwischen nebenläufigen Threads Java Basics - Anfänger-Themen 4
S Gemeinsame Ressource und Mehrfachinstanziierung von Threads Java Basics - Anfänger-Themen 16
S Verklemmung Threads Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben