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.)
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);
}
}
}