Hallo zusammen,
ich bastel an einem Applet, welches einen Planet und Raumschiff zeichnet und a) das Raumschiff losfliegen lässt, und b) das Wetter ändert und animiert.
Bei dem Code den ich untenstehend habe, scheint mir der Teil mit dem Thread nicht so zu funktionieren, wie ich mir das vorgestellt habe. Ich muss dazu sagen, dass ich vor allem über Threads nicht so viel Bescheid weiß.
Vom Programm werden Buttons zum Zeichnen des Planets, zum Zeichnen des Raumschiffs und zum Starten der Abflugsequenz, sowie Radiobuttons zur Wettermanipulation mit einem "Wetterupdate"-button bereitgestellt.
Ich möchte nun, dass jemand zunächst mal den Planet per Buttonklick zeichnet, dann per Klick das Raumschiff, und es dann Starten lässt.
Leider wird die Komponente aber immer nur nach einem Actioneven neu gezeichnet, nicht aber aus der run() Anweisung meines Threads animation heraus.
Hier mal der Code:
Ich habe eine weniger komplexe animation getestet, welcher im Wesentlichen der Code hier angelehnt ist, und jene hat funktioniert.
Da wie gesagt nur bei einem actionEvent die repaint() ausgeführt wird, nehme ich an, dass der Fehler beim Thread oder bei der Handhabung des selbigen liegt.
Ich denke mal auch, ich habe das ganze nicht sonderlich solide programmiert, aber ich bin auch noch Anfänger und denke mir, dass man am besten mit Herausforderungen weiterkommt.
Ich bin folglich für jedliche Hilfe oder Anregung überaus dankbar,
k.
ich bastel an einem Applet, welches einen Planet und Raumschiff zeichnet und a) das Raumschiff losfliegen lässt, und b) das Wetter ändert und animiert.
Bei dem Code den ich untenstehend habe, scheint mir der Teil mit dem Thread nicht so zu funktionieren, wie ich mir das vorgestellt habe. Ich muss dazu sagen, dass ich vor allem über Threads nicht so viel Bescheid weiß.
Vom Programm werden Buttons zum Zeichnen des Planets, zum Zeichnen des Raumschiffs und zum Starten der Abflugsequenz, sowie Radiobuttons zur Wettermanipulation mit einem "Wetterupdate"-button bereitgestellt.
Ich möchte nun, dass jemand zunächst mal den Planet per Buttonklick zeichnet, dann per Klick das Raumschiff, und es dann Starten lässt.
Leider wird die Komponente aber immer nur nach einem Actioneven neu gezeichnet, nicht aber aus der run() Anweisung meines Threads animation heraus.
Hier mal der Code:
Code:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class RocketUser extends Applet implements ActionListener, Runnable{
Planet myPlanet = new Planet(400,200,200);
Rocket myRocket = new Rocket(100,myPlanet.tellHorizon());
Thread animation;
boolean drawPlanet = false;
boolean drawRocket = false;
boolean launchRocket = false;
...alle buttons und checkboxen...
public void init(){
...alle buttons und checkboxen definieren, hinzufügen und actionlistener an die vier buttons
}
public void actionPerformed(ActionEvent e){
if (e.getSource() == drawPlanetButton) drawPlanet = true;
if (e.getSource() == drawRocketButton) drawRocket = true;
if (e.getSource() == launchRocketButton) launchRocket = true;
repaint();
}
public void handleDrawing(Graphics g){
//planet
if (drawPlanet == true){
myPlanet.drawPlanet(g,day.getState(),dust.getState(),night.getState(),sunny.getState(),cloudy.getState(),rainy.getState());
}
//rocket
if (drawRocket == true){
if (launchRocket == true){
myRocket.moveRocket(0,-10);
myRocket.drawRocket(g,false);
}else{
myRocket.drawRocket(g,false);
}
}else{
launchRocket = false;
}
}
public void paint(Graphics g){
handleDrawing(g);
}
public void start(){
animation = new Thread();
animation.start();
}
public void run(){
while (Thread.currentThread() == animation){
repaint();
try{
animation.sleep(1000);
} catch (InterruptedException e){
break;
}
}
}
}
Ich habe eine weniger komplexe animation getestet, welcher im Wesentlichen der Code hier angelehnt ist, und jene hat funktioniert.
Da wie gesagt nur bei einem actionEvent die repaint() ausgeführt wird, nehme ich an, dass der Fehler beim Thread oder bei der Handhabung des selbigen liegt.
Ich denke mal auch, ich habe das ganze nicht sonderlich solide programmiert, aber ich bin auch noch Anfänger und denke mir, dass man am besten mit Herausforderungen weiterkommt.
Ich bin folglich für jedliche Hilfe oder Anregung überaus dankbar,
k.