Anfängerfrage - Multithreading

Status
Nicht offen für weitere Antworten.

ub007

Mitglied
Hallo !

Ich habe ein Java-Kurs als PDF aus dem Internet geladen, dass ganz O.K. ist. Im letzten Teil wird Multithreading beschrieben. Da ich diesen Kurs nicht besucht habe fehlt mir irgendwie der Zusammenhang bei dieser Übung. Es ist ein kleines Programm das einen Halbmond von links nach rechts laufen läßt. Es ist gar nicht so schwierig aber es gibt ein paar Programm-Punkte die ich nicht verstehe. Die Grafik-Befehle sind vorerst nicht wichtig.
Das Programm kann im Appletviewer oder im Browser angezeigt werden. Der grobe Aufbau von Multithreading ist mir klar. Das wäre der Kommentar /*0*/ und 4. Aber die Punkte 1,2,3,5 und 6 nicht.
In diesem Programm wird nie init() /*1*/ aufgerufen. D.h. für mich das offensichtlich das irgendwie Java für mich erledigt, oder ?
Ebenso werden start() - stop() - update() und paint() nie aufgerufen. Wenn ich sie im Programm entferne geht das Programm nicht mehr. Also muss auch hier Java irgendwie was machen oder etwas vordefiniertes ( Overloading ? ) haben.
Mit ist auch nicht so richtig klar warum man für dieses Programm z.B. ein Multithreading-code einsetzt. Gut, das hat sich der Dozent halt einfallen lassen und ist für mich dennoch interessant. Ich dachte Multithreading ist gut geeignet für mehrere Abläufe gleichzeitig die dann unabhängig voneinander laufen, aber hier ist mir das unklar.
Vielleicht habe ich aber etwas grundsätzliches bei Multithreading nicht verstanden.
Wer kann mir helfen ?
(Das Programm habe ich nochmals als Text-File angehängt.)

Code:
import java.awt.* ;
import java.applet.* ;

/*0*/
public class Anima extends Applet implements Runnable {
	private volatile boolean runFlag;
	private int x, y, height, width;
	private Image img;
	private Graphics g;
	private Thread t = null;
	private Color nightColor = new Color (0, 0, 102);
	private Color moonColor = new Color (204, 204, 255);

/*1*/
	public void init() {
		Dimension d = getSize();
		width = d.width;
		height = d.height;
		img = createImage (width, height);
		g=img.getGraphics();
		x = width/2;
		y = height/2;
	}

/*2*/
	public void start() {
		if (t == null)
		{
			t = new Thread (this);
			t.start();
		}
	}

/*3*/
	public void stop() {
		if (t != null)
		{
			runFlag=false; // or: t.stop();
			t=null;
		}
	}

/*4*/
	public void run () {
		runFlag=true;
		while (runFlag) 
		{
			g.setColor (nightColor);
			g.fillRect(0,0,width,height);
			g.setColor (moonColor);
			g.fillArc(x, y-25, 50, 50, 270, 180);
			repaint();
			x = x + 2;
			if (x > width+50 ) 
			{
				x = -50;
			}
			try { Thread.sleep(100); }
			catch (InterruptedException e) {}
		}
	}

/*5*/
	public void update (Graphics g) {
		paint(g);
	}

/*6*/
	public void paint (Graphics g) {
		if (img != null) 
		{
			g.drawImage(img,0,0,null);
		}
	}
}
 

Anhänge

  • Anima.txt
    1,3 KB · Aufrufe: 4

diggaa1984

Top Contributor
Bezüglich init,start und stop findest in der Applet-API nötige Infos. Was den Umgang mit paint und update angeht, ob das bei Applets derart üblich ist, weiss ich grad nicht, da kann vielleicht wer anderes etwas dazu sagen.
 

Schandro

Top Contributor
paint und update ruft man nie manuell auf, sie werden automatisch aufgerufen wenn das Applet denkt das es neu gemalt werden muss bzw. wenn du es mit repaint() dazu aufforderst.

run wird hierdurch aufgerufen:
Java:
			t = new Thread (this);
			t.start();
Das heißt der Code in der run-Methode wird nebenläufig/asynchron/... zu den anderen Code ausgeführt. Wenn der Code der run-Methode nicht in einem extra Thread ausgeführt werden würde, könnte es Probleme mit der GUI geben (freeze)
 

ub007

Mitglied
Hallo diggaa1984 - hallo Schandro !

Yep. Danke an euch beide für die schnelle Antwort. Hat geholfen !!!

Gruß Uli
 

Spin

Top Contributor
Hey Leute , also wenn ich was male mit der paint Methode und es mit einen Thread bewegen lasse, dann flackert es meistens.

Daher überschreibe ich die update Methode . ( Doppelpufferung ). So habe ich es mal gelernt gehabt.

Java:
public void update (Graphics g)
	{
		// Initialisierung des DoubleBuffers
		if (dbImage == null)
		{
			dbImage = createImage (this.getSize().width, this.getSize().height);
			dbg = dbImage.getGraphics ();
		}

		// Bildschirm im Hintergrund löschen
		dbg.setColor (getBackground ());
		dbg.fillRect (0, 0, this.getSize().width, this.getSize().height);

		// Auf gelöschten Hintergrund Vordergrund zeichnen
		dbg.setColor (getForeground());
		paint (dbg);

		// Nun fertig gezeichnetes Bild Offscreen auf dem richtigen Bildschirm anzeigen
		g.drawImage (dbImage, 0, 0, this);
	}
}


Wie geht ihr denn da vor?
 

Marco13

Top Contributor
JApplet (Swing) statt Applet (AWT) verwenden. Bei Swing ist Double Buffering schon eingebaut...
 

Spin

Top Contributor
Aso ;)

Da ist es schon mit drin !^^
Danke für die Info. Dann baue ich mal alles in JApplet um , macht vielleicht mehr sinn , als in AWT die Apllets zu lassen.

Oder würdet ihr denn gleich JFrame bevorzugen.?

Ich bin bei ein SpielTut, durch zugehen und wollte mir die Mühe machen , dass umzuschreiben in Swing.

Daher meine Frage ein AWT Applet spiel : Lieber in JApplet oder gleich JFrame?

gruß spin
 

Schandro

Top Contributor
Da Applets am austerben sind (aus guten Grund): Lieber JFrame. Kommt aber drauf an wo du das Programm benutzen willst.
 

Spin

Top Contributor
Das Spiel soll auf den Clienten ausführ bar sein. Das heißt ich starte es später als .jar
Wenn ich es Online Stellen möchte, brauche ich natürlich ein Applet.

Aber das kann man ja zu Not immer noch um schreiben ;)
Ok danke für Info.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Anfängerfrage zu meinem Programm. Java Basics - Anfänger-Themen 15
V Anfängerfrage: HelloWorld läuft nicht Java Basics - Anfänger-Themen 3
F if else if anfängerfrage Java Basics - Anfänger-Themen 22
P Anfängerfrage, Primitiv,komplex Java Basics - Anfänger-Themen 1
pkm Erste Schritte Anfängerfrage zu ::new Java Basics - Anfänger-Themen 4
A Anfängerfrage Java Basics - Anfänger-Themen 7
M Erstellung Interfaces....totale Anfängerfrage Java Basics - Anfänger-Themen 16
W DNS Name auslesen + weitere Anfängerfrage Java Basics - Anfänger-Themen 4
R Anfängerfrage zu Methoden in Vererbte Klassen Java Basics - Anfänger-Themen 2
F Erste Schritte (Gelöst) Anfängerfrage Arraylist ausserhalb der Main Methode Java Basics - Anfänger-Themen 2
DeVolt Anfängerfrage zu util.scanner Java Basics - Anfänger-Themen 2
T Anfängerfrage zu Schleifen und Arrays Java Basics - Anfänger-Themen 5
B Collections ArrayList füllen - Anfängerfrage Java Basics - Anfänger-Themen 1
Shams Anfängerfrage zu jnlp Java Basics - Anfänger-Themen 0
T Kleine Anfängerfrage :) Java Basics - Anfänger-Themen 4
I Anfängerfrage JPanel repaint() Java Basics - Anfänger-Themen 6
F Anfängerfrage zu extends Java Basics - Anfänger-Themen 12
A Anfängerfrage: Zahlformat prüfen Java Basics - Anfänger-Themen 4
I Anfängerfrage: Fehlersuche Java Basics - Anfänger-Themen 2
A Methoden Anfängerfrage: 2 Listen Vergleichen Java Basics - Anfänger-Themen 7
L Anfängerfrage zu TileMap Java Basics - Anfänger-Themen 4
J anfängerfrage Java Basics - Anfänger-Themen 10
J Anfängerfrage HelloWorld? cmd-Problem Java Basics - Anfänger-Themen 35
J Anfängerfrage zu Grundlagen von Packages Java Basics - Anfänger-Themen 7
J Anfängerfrage zur Variablen Java Basics - Anfänger-Themen 11
J Anfängerfrage :-) Java Basics - Anfänger-Themen 5
M Banale Anfängerfrage Java Basics - Anfänger-Themen 3
Y Anfängerfrage zu array(-Syntax) Java Basics - Anfänger-Themen 6
J Leichte Java Anfängerfrage. Bitte schnelle Antwort. :) Java Basics - Anfänger-Themen 10
T Aufrufen von get-Methode aus anderer Klasse (absolute Anfängerfrage) Java Basics - Anfänger-Themen 2
G Anfängerfrage zu "@Override" Java Basics - Anfänger-Themen 5
N Anfängerfrage richtige Syntax und Frage zu Vector Java Basics - Anfänger-Themen 7
A Anfängerfrage - array required, but java.lang.String found Java Basics - Anfänger-Themen 7
M Kleine Anfängerfrage Java Basics - Anfänger-Themen 10
S Anfängerfrage zu Array Java Basics - Anfänger-Themen 8
K Anfängerfrage: Fehlermeldung Java Basics - Anfänger-Themen 6
D Anfängerfrage N. Office Access NOA: setHidden und dann . Java Basics - Anfänger-Themen 2
N Anfängerfrage Java Basics - Anfänger-Themen 14
N anfängerfrage. returnwerte Java Basics - Anfänger-Themen 3
Gama Importieren von Klassen [Anfängerfrage] Java Basics - Anfänger-Themen 3
G Anfängerfrage Java Basics - Anfänger-Themen 11
B Anfängerfrage zu Swing "Reload" Java Basics - Anfänger-Themen 2
N Anfängerfrage bezüglich Speicherverwaltung Java Basics - Anfänger-Themen 3
G Anfängerfrage zu Threads Java Basics - Anfänger-Themen 14
Q Anfängerfrage Java Basics - Anfänger-Themen 6
J Anfängerfrage: wie externe Dateien importieren? Java Basics - Anfänger-Themen 5
S Anfängerfrage Java Basics - Anfänger-Themen 7
G Anfängerfrage zu Vererbung Java Basics - Anfänger-Themen 6
B Anfängerfrage zu 'NoClassDefFoundError' Java Basics - Anfänger-Themen 2
J IO Frage Hex-Output - Anfängerfrage Java Basics - Anfänger-Themen 5
T Anfängerfrage -> Projekt Java Basics - Anfänger-Themen 2
C Anfängerfrage ->Objekte und Arrays Java Basics - Anfänger-Themen 4
V Anfängerfrage Java Basics - Anfänger-Themen 8
E RMI Anfängerfrage Java Basics - Anfänger-Themen 10
DEvent anfängerfrage: wieso layout erst beim verändern? Java Basics - Anfänger-Themen 6
G Anfängerfrage Java Basics - Anfänger-Themen 2
buzzlightyeah multithreading Java Basics - Anfänger-Themen 4
sserio Frage zu Threading - Multithreading Java Basics - Anfänger-Themen 2
I Threads Multithreading, Producer/Consumer, notify() Java Basics - Anfänger-Themen 6
M Mehre Dateien parallel kopieren mit Multithreading Java Basics - Anfänger-Themen 8
kilopack15 Verzweiflung wegen Berechnung mit Multithreading Java Basics - Anfänger-Themen 1
P Multithreading in Java Java Basics - Anfänger-Themen 9
N Threads Read-Modify-Write Problem bei Multithreading (philosopher dining problem) Java Basics - Anfänger-Themen 5
R Threads Multithreading Java Basics - Anfänger-Themen 15
Z Verständnisfrage zum Multithreading Java Basics - Anfänger-Themen 3
T Threads MultiThreading NullPointerException Java Basics - Anfänger-Themen 7
K Frage bzgl. Multithreading Java Basics - Anfänger-Themen 5
B Multithreading und eigene Queue entwickeln Java Basics - Anfänger-Themen 3
C Multithreading, Methoden sichern Java Basics - Anfänger-Themen 5
P Hilfe bei MultiThreading; Einige Fragen. Java Basics - Anfänger-Themen 14
S OOP Multithreading Java Basics - Anfänger-Themen 5
B Multithreading Java Basics - Anfänger-Themen 5
0din Multithreading und stop Java Basics - Anfänger-Themen 5
P Singletons und Multithreading Java Basics - Anfänger-Themen 11
H Multithreading Java Basics - Anfänger-Themen 7
M Multithreading Java Basics - Anfänger-Themen 18
I Multithreading (Prüfungsvorbereitung) Java Basics - Anfänger-Themen 6
G UI friert bei Multithreading ein Java Basics - Anfänger-Themen 3
J Multithreading mit einer TextArea Java Basics - Anfänger-Themen 29
JFeel-x Multithreading in awt Java Basics - Anfänger-Themen 2
L NullpointerException wegen wahrscheinlichem Multithreading Java Basics - Anfänger-Themen 4
Z Multithreading Java Basics - Anfänger-Themen 2
P Multithreading Java Basics - Anfänger-Themen 22

Ähnliche Java Themen

Neue Themen


Oben