G
Guest
Gast
Hallo Leute,
ich muss als Praktikum eine "Seilbahn programmieren" welche man mit Personen besetzen kann und angezeigt werden.
Soweit funktioniert auch alles, ausser dass es mir während des Threads-durchlauf nicht neu gezeichnet wird.
Nun hab ich eine innere klasse namens motor, welche die seilbahn bewegen sollte. Dies wird auch ausgeführt, wenn ich dies mittels einem system.out jeweils im Thread(schleife) ausgebe. Jedoch wird der repaint() im thread nicht ausgeführt.
Was könnte das sein?
Ich stelle mal den Code online , falls mir jemand helfen möchte, herauszufinden was es sein könnte, wäre echt nett!
(Interessant ist eigentlich nur die run() methode.
ich muss als Praktikum eine "Seilbahn programmieren" welche man mit Personen besetzen kann und angezeigt werden.
Soweit funktioniert auch alles, ausser dass es mir während des Threads-durchlauf nicht neu gezeichnet wird.
Nun hab ich eine innere klasse namens motor, welche die seilbahn bewegen sollte. Dies wird auch ausgeführt, wenn ich dies mittels einem system.out jeweils im Thread(schleife) ausgebe. Jedoch wird der repaint() im thread nicht ausgeführt.
Was könnte das sein?
Ich stelle mal den Code online , falls mir jemand helfen möchte, herauszufinden was es sein könnte, wäre echt nett!
(Interessant ist eigentlich nur die run() methode.
Code:
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class Seilbahn extends Applet implements ActionListener,AdjustmentListener {
/**
* Autor: Manuel Miklo
* Date: 23.4.08
* Version: 1.0
*/
private static final long serialVersionUID = 1L;
private Gondel[] gondeln;
private TextField txtein,txtaus;
private Button neu,loeschen,ok;
private Scrollbar einsteiger;
private Label lblein;
public static int id=0;
private int seil_y_unten=350;
private int seil_y_oben=50;
private int abstand;
private boolean running=false;
private Thread motor;
public void init(){
//Applet init
setSize(1000,800);
//Div. init
gondeln=new Gondel[6];
abstand=(int)(this.getWidth()/gondeln.length);
//Gui
txtein=new TextField(10);
txtaus=new TextField(25);
neu=new Button("Neu");
neu.addActionListener(this);
loeschen=new Button("Loeschen");
loeschen.addActionListener(this);
ok=new Button("einsteigen");
ok.addActionListener(this);
einsteiger=new Scrollbar(Scrollbar.HORIZONTAL,0,1,1,9);
einsteiger.addAdjustmentListener(this);
lblein=new Label(""+einsteiger.getValue());
//Darstellen
add(new Label("Gondelgrösse:"));
add(txtein);
add(new Label("Exception"));
add(txtaus);
add(neu);
add(loeschen);
add(new Label("Einsteigen:"));
add(einsteiger);
add(lblein);
add(new Label("Person/en"));
add(ok);
motor=new Thread(new Motor());
}
public void update(Graphics g) {
paint(g);
}
public void paint(Graphics g){
System.out.println("Hallo");
abstand=(int)(this.getWidth()/gondeln.length);
g.drawLine(0, seil_y_unten, this.getWidth(), seil_y_oben);
for(int i=0;i<id;i++){
gondeln[i].display(g);
//System.out.println(gondeln[i].getPos()+"............");
}
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==neu){
txtaus.setText("");
running=true;
motor.run();
if(id<gondeln.length){
try{
gondeln[id]=new Gondel(id,0*abstand,seil_y_unten,Integer.parseInt(txtein.getText()));
}catch(NumberFormatException ne){
txtaus.setText("Gondelgrösse eintragen(4/8)");
}catch(UngueltigeGondelGroesseException ugge){
txtaus.setText(ugge.getMessage());
}
if(gondeln[id]!=null) id++;
}
else txtaus.setText("Seilbahn gefüllt");
}
if(e.getSource()==loeschen){
for(int i=0;i<gondeln.length;i++) gondeln[i]=null;
txtein.setText("");
txtaus.setText("");
id=0;
}
if(e.getSource()==ok){
try{
if(id==0) throw new KeineGondelException();
gondeln[id-1].einsteigen(einsteiger.getValue());
}catch(KeineGondelException kge){
txtaus.setText(kge.getMessage());
}catch(GondelBelegtException gbe){
txtaus.setText(gbe.getMessage());
}
}
repaint();
}
public void adjustmentValueChanged(AdjustmentEvent e){
lblein.setText(""+einsteiger.getValue());
}
class Motor implements Runnable{
public Thread motor;
@Override
public void run() {
int delta=1;
int temp=0;
while (running){
if(Seilbahn.id>=1){
while(temp<=abstand){
for(int i=0;i<Seilbahn.id;i++){
gondeln[i].setPos(delta,((seil_y_unten-seil_y_oben)*(double)delta)/getWidth());
}
System.out.println("sdf");
repaint();
temp+=delta;
try{
Thread.sleep(150);
}catch(InterruptedException e){
}
}
}
running=false;
}
}
}
}
Ich bin am verzweifeln!!
Gruss
Miklo