# Applet hält nicht an, wenn der Browser minimiert ist



## MarioLemieux (5. Aug 2005)

Hallo,

Ich brauche wieder mal einen Appletspezialisten... Ich hab ein Problem:
Ich hab ein Applet (das selbe wie schon in den vorherigen Fragen...) und wenn ich es im Browser laufen lasse und den Browser minimiere, läuft es trotzdem weiter.
Wenn ich dann den Browser wieder maximiere, wird mein Feld nicht mehr gezeichnet.

Im AppletViewer vom Elipse funktionniert es aber, wenn ich dort das Applet minimiere, geht es in stop-methode und wenn ich es wieder maximiere in die run-methode.

Kann mir jemand sagen, was ich machen müsste, damit das Applet anhält?  :bahnhof:  oder das wenigstens das Applet wieder komplet neu gezeichnet wird.

Gruss MarioLemieux


----------



## Sky (5. Aug 2005)

1.) Welcher Browser?

2.) Welche Methoden übschreibst Du? Es müssten start und stop sein.


----------



## L-ectron-X (5. Aug 2005)

Du musst die stop()-Methode überschreiben, also mit Code füllen, mit dem du festlegst, was getan werden soll, wenn das Applet nicht sichtbar ist. Also bspw. Threads anhalten etc.
Wenn das Applet wieder sichtbar wird, startest du bspw. wieder einen Thread. Dazu überschreibst du die start()-Methode.
Um ein Applet neu zu zeichnen benutzt man in den meisten Fällen die repaint()-Methode.


----------



## MarioLemieux (8. Aug 2005)

Hallo, also es geht weder im IE 6 noch im Opera.

Mein Problem ist, das das Applet gar nicht in die Stop methode geht, wenn der Browser minimiert ist. Habe ein 
	
	
	
	





```
System.out.println("in Stop")
```
 in die Stopmethode eingefügt und wenn ich dann die JAVA Konsole überprüfe, kommt es eben nicht...



```
public void start(){
		if (thread == null){
			thread = new Thread(this);
			stopThread = false;
			thread.start();
		}	
		
		Feld.paint(getGraphics());
		this.setVisible(true);
		init=0;
		repaint();
	}



public void stop(){
		stopThread=true;
		thread=null;
		init=0;
		System.out.println("in stop");
		//setVisible(true);
	}
```


----------



## Sky (8. Aug 2005)

Dumme Frage: Die Methoden liegen auch in der Klasse, die von Applet bzw. JApplet abgeleitet ist!?


----------



## MarioLemieux (8. Aug 2005)

Ja, ist in der Klasse, die von JApplet abgeleitet ist!
Irgendwie wirft dieses Programm recht viel der von mir gelernten Theorie über den Haufen...


----------



## L-ectron-X (8. Aug 2005)

Kannst du mal die gesamte Applet-Klasse posten?


----------



## MPW (8. Aug 2005)

Aber das Applet geht schon und du hast auch das PlugIn drin..sonst geht ja auch JApplet nicht...

Brauchst du einige Funktionen aus JApplet sonst versuch' doch mal Applet.


----------



## L-ectron-X (8. Aug 2005)

@MPW: Guck dir mal den Vererbungsbaum an. JApplet erbt direkt von Applet. :wink:


----------



## MPW (8. Aug 2005)

jaja aber ich dachte mal so spontan, vielleicht kriegt's die JVM nicht geschissen doer soo aber ich mach nicht so viel mit Applets..wenn du sagst daran liegt's nicht, dann liegt's nicht daran...


----------



## L-ectron-X (9. Aug 2005)

Es stimmt schon, die Kompatibilität der VMs untereinander, insbesondere zu älteren Versionen unterhalb Java 1.2 bereiten die größten Probleme bei der Nutzbarkeit. Selbst, wenn du ein Applet mit Java 1.5 kompilierst, muss der Client ebenso Java 1.5 einsetzen. Sobald das Applet möglichst größe Verbreitung finden soll, ist es einfach besser, den kleinesten gemeinsamen Nenner zu wählen. Und das ist nun mal ein Java 1.1-Applet. Ist eine bestimmte Funktionalität von großer Wichtigkeit, bleibts eben bei einem JApplet.
Insofern hast du also schon Recht.  
Nur das Problem dieses Threads wird wohl alle Typen von Applet betreffen. Daher ist es erst mal egal, "welches" Applet hier programmiert wird (JApplet/Applet).
Um etwas mehr sagen zu können, wäre es von Vorteil die ganze Applet-Klasse zu sehen.


----------



## MarioLemieux (10. Aug 2005)

Hallo, die Klasse, die von JApplet erbt ist eben ziemlich gross... na ja, vielleicht nimmt sich trotzdem jemand Zeit, das ganze mal ein bisschen genauer anzuschauen! Wäre sehr nett!  :toll: 



```
public class Start extends JApplet implements Runnable{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	final int SinNachUnten=210;
	final int SinNachRechts=30;
	static int Ausgleich=0;
	static int NeuesBild=0;
	final int lira=60;
	final int obra=170;
	int FeldgrösseX=480;
	int FeldgrösseY=300;
	int Unitalt=0;
    int Anzahl=0;	
    int count=1;
    int init=0;
    
    
	private Thread thread;
	private boolean stopThread = false;
	
	Image img_doc, img_rip, img_pokal, img_wave, img_accu;
	
	Random r = new Random();

    GUI_Feld Feld;
    GUI_Status status;
    GUI_Bedienfeld bedienfeld;
    initialisiereMenu menu;
    JMenuBar JMB; 
    Berechnungen berechnungen; 
    Container contentPane;
  
    
    int Morgenessen=0;
    int Mittagessen=0;
    int Abendessen=0;
   
    double Glucose=0;
    double realtime=0;
	double time=0;
	double start=0;
	double glucoseStart=0;
	double BasalGlucose=0;
	int meal=0;
	double mealsize=0;
	double Insulin=0;
	double randomstart;
	double randomglucose;
	double randomBG;
	double mealtime = 0;
	int Geschw=0;
	int BildAusgegeben=0;
	

    
	
	public void init(){
		contentPane = getContentPane();
		//contentPane.setBackground(Color.BLACK);
		contentPane.setBackground(Color.white);
		status = new GUI_Status();
		bedienfeld = new GUI_Bedienfeld(260, 100,Feld);
		berechnungen = new Berechnungen();
		JMB = new JMenuBar();
		menu = new initialisiereMenu(JMB,bedienfeld);
		setJMenuBar(JMB);
		
		randomstart = berechnungen.randomStart();
		randomglucose=berechnungen.randomGlucose();
		randomBG = berechnungen.randomBG();
		
		JPanel jp=new JPanel();
		//jp.setBackground(Color.black);
		//this.setBackground(Color.BLACK);		
		
		jp.setBackground(Color.white);
		this.setBackground(Color.white);	
		
		JPanel p= new JPanel();		
		
		JLabel tl = new JLabel();
		tl.setFont(new Font("Arial",Font.BOLD,20));

	
		 
		Toolkit toolkit = java.awt.Toolkit.getDefaultToolkit();
		Dimension screen_size = toolkit.getScreenSize();       
		int width = screen_size.width; 
		int height = screen_size.height;
		  
		System.out.println("Screen Size width "+width+" height "+height);    
		
		//Bilder vorladen
		img_doc=getImage(getCodeBase(),"DOC.PNG");
		img_rip=getImage(getCodeBase(),"RIP.PNG");
		img_pokal=getImage(getCodeBase(),"POKAL.PNG");
		img_wave=getImage(getCodeBase(),"LOGO.PNG");
		img_accu=getImage(getCodeBase(),"ACCUCHEK.PNG");
		
		
		MediaTracker mt = new MediaTracker(this);
		mt.addImage(img_wave, 1);
		mt.addImage(img_doc, 2);
		mt.addImage(img_rip, 3);
		mt.addImage(img_pokal, 4);
		
		try {
		//Warten, bis das Image vollständig geladen ist,
		mt.waitForAll();
		} catch (InterruptedException e) {
		//nothing
			System.out.println(""+e);
		}

		
		
		Feld = new GUI_Feld(bedienfeld,FeldgrösseX, FeldgrösseY, lira, obra, width, img_wave, img_accu);	

		//setSize(1020,650);
		setSize(width-10,height-150);
		getContentPane().setLayout(new BorderLayout());

		p.setLayout(new BorderLayout());
		p.add(BorderLayout.CENTER,bedienfeld);
		//p.add(BorderLayout.EAST, new JLabel("  "));
		
		contentPane.add(BorderLayout.SOUTH,status);
		contentPane.add(BorderLayout.EAST,p);
		contentPane.add(BorderLayout.NORTH,new JLabel(" "));
		
		p = new JPanel();
		p.setLayout(new GridLayout(4,1));
		tl.setText("  Learn in a playful form the interrelation of insulin and glucose");
		
		p.add(new JLabel(" "));
		
		/*p.add(new JLabel(" "));
		p.add(new JLabel(" "));
		p.add(new JLabel(" "));*/
		p.add(new JLabel(" "));
		p.add(new JLabel(" "));
		p.add(tl);
		
		p.setBackground(Color.white);
		contentPane.add(BorderLayout.NORTH,p);
		
		
		status.statusAusgeben("Welcome to ArtDiab v2");
				
		esseninit();
		
		System.out.println("ende init");

		//this.setVisible(true); //war drin ging bis jetzt
		setVisible(true);
		Feld.paint(getGraphics());
	}
	
	public void start(){
		if (thread == null){
			thread = new Thread(this);
			stopThread = false;
			thread.start();
		}	
		
		Feld.paint(getGraphics());
		this.setVisible(true);
		init=0;
		repaint();
	}

	
	int SimuLoop=1;
	public void run() {

		int Delay=0;
		berechnungen.BGinit();
		//setVisible(true);
		
		setJMenuBar(JMB);
		//setVisible(true);//war drin
		repaint();
		//validate();
		
		System.out.println("in run");
		
		while (thread!=null){
			if(stopThread==true)
				return;
			
			//this.setVisible(true);//war drin
			Geschw= bedienfeld.WelcheGeschwindigkeit();
			try{
				Thread.sleep(Geschw);
			}catch(InterruptedException e){
				System.out.println("e");
			}

			if (menu.FeldLöschen()==1){
				Feld.FeldLöschen(bedienfeld,berechnungen,menu,getGraphics());
				init=0;
				NeuesBild=0;
				status.statusAusgeben("Welcome to ArtDiab v2");				
				SimuLoop=1;
				esseninit();
				BildAusgegeben=0;
				Feld.paint(getGraphics());
			}
			
			if (menu.FeldNeuZeichnen==1){
				menu.FeldNeuZeichnen=0;
				Feld.paint(getGraphics());
				repaint();
			}
			

			if(SimuLoop<=240 & bedienfeld.StartGedrückt==1){
			
				Delay = bedienfeld.Delay();
				Insulin = bedienfeld.InsulinGedrückt();
			
				realtime=berechnungen.realTime(SimuLoop);
				BasalGlucose=berechnungen.basalGlucose(realtime,randomglucose,randomstart);
				berechnungen.BGarrey(SimuLoop,0,BasalGlucose,0);
				berechnungen.CalcBasalInsulin(Delay, SimuLoop, bedienfeld);
				
				if(SimuLoop >= mealtime){
					berechnungen.CalcMeal(SimuLoop);
					if(Delay==0)
						berechnungen.BGvalue(berechnungen.BGarray,SimuLoop,0);
					else{
						if(SimuLoop>=2)
							berechnungen.BGvalue(berechnungen.BGarray,SimuLoop,2);
						else
							berechnungen.BGvalue(berechnungen.BGarray,SimuLoop,0);
					}

					if(SimuLoop >=160)
						mealtime=berechnungen.mealtime(300);
	
					else
					{
						if(SimuLoop >= 105){
							mealtime=berechnungen.mealtime(170);
							Abendessen=(int) mealtime;
						}
						else{
							mealtime=berechnungen.mealtime(110);
							Mittagessen=(int) mealtime;
						}
					}
				
				}
				else{
					if(Delay==0)
						berechnungen.BGvalue(berechnungen.BGarray,SimuLoop,0);
					else{
						if(SimuLoop>=2)
							berechnungen.BGvalue(berechnungen.BGarray,SimuLoop,2);
						else{
							berechnungen.BGvalue(berechnungen.BGarray,SimuLoop,0);
							System.out.println("Delay geht!");
						}
						
					}
					
				}
				
			
				berechnungen.BolusIU(bedienfeld,SimuLoop);
				if(bedienfeld.Unit==1)
					bedienfeld.BGschreiben(""+Math.round(berechnungen.BGvalue[SimuLoop]));
				else{
					//Runden auf 2 Stellen nach dem Komma
					double ZR2=Math.round(100*berechnungen.BGvalue[SimuLoop]/20);
					double ER= ZR2/100;
					bedienfeld.BGschreiben(""+ER);
				}
		
				// Runden auf 1 Stelle nach dem Komma
				double IUTemp=Math.round((450-(double)bedienfeld.Scrollbar())/45*10);
				double IUschreib = IUTemp/10;
				bedienfeld.IUschreiben(""+ IUschreib);
				berechnungen.GraphValue[SimuLoop]=(SinNachUnten + FeldgrösseY-(FeldgrösseY/300 * berechnungen.BGvalue[SimuLoop]));
				repaint();
				SimuLoop++;			
			}
		}
	}			
		
	
    
	public void paint(Graphics g){
		
		int i=1;
		int morgen=0;
		int mittag=0;
		int abend=0;
		int schritt = FeldgrösseX/240;
		
		
		this.isDoubleBuffered();
		g.setColor(Color.WHITE);	
		
		if (init++==0 | bedienfeld.FeldNeuZeichnen==1){
			bedienfeld.FeldNeuZeichnen(0);
			bedienfeld.BolusAuswahl=0;
			BildAusgegeben=0;
			Feld.paint(g);
			System.out.println("in der verzweigung init++ = 0");
		}
		
		g.setColor(Color.red);
		g.setClip(lira,obra,FeldgrösseX,FeldgrösseY);
		
		for(;berechnungen.BGvalue[i]!=0 && i<=240 ;i++){
				
				g.drawLine(lira+schritt*i,(int)(obra+FeldgrösseY-berechnungen.BGvalue[i-1]),lira+schritt*(i+1),(int)(obra+FeldgrösseY-berechnungen.BGvalue[i]));

				if (i>=Morgenessen && morgen==0){
					morgen=i;
				}
				if (morgen>0 && bedienfeld.EssenZeigen()==1){
					g.setColor(Color.green);
					g.drawLine(lira+(morgen)*schritt,FeldgrösseY+obra-2,
							lira+(morgen+1)*schritt,(int) (obra+FeldgrösseY-berechnungen.WievielMorgenessen));
					g.drawLine(lira+(morgen+1)*schritt,(int) (FeldgrösseY+obra-berechnungen.WievielMorgenessen),
							lira+(morgen+2)*schritt,FeldgrösseY+obra-2);
					g.setColor(Color.red);
				}
				
				if (i>=Mittagessen && mittag==0){
					mittag=i;
				}
				if (mittag>0 && bedienfeld.EssenZeigen()==1){
					g.setColor(Color.green);
					g.drawLine(lira+(mittag)*schritt,FeldgrösseY+obra-2,
							lira+(mittag+1)*schritt,(int) (obra+FeldgrösseY-berechnungen.WievielMittagessen));
					g.drawLine(lira+(mittag+1)*schritt,(int) (FeldgrösseY+obra-berechnungen.WievielMittagessen),
							lira+(mittag+2)*schritt,FeldgrösseY+obra-2);
					g.setColor(Color.red);
				}
				
				if (i>=Abendessen && abend==0){
					abend=i;
				}
				if (abend>0 && bedienfeld.EssenZeigen()==1){
					g.setColor(Color.green);
					g.drawLine(lira+(abend)*schritt,FeldgrösseY+obra-2,
							lira+(abend+1)*schritt,(int) (obra+FeldgrösseY-berechnungen.WievielAbendessen));
					g.drawLine(lira+(abend+1)*schritt,(int) (FeldgrösseY+obra-berechnungen.WievielAbendessen),
							lira+(abend+2)*schritt,FeldgrösseY+obra-2);
					g.setColor(Color.red);
				}

			
			double BG=berechnungen.BGvalue[i];
			if(i>2){				
				if((BG > 30 && BG < 50 || BG > 150 && BG < 600) && NeuesBild==0)
					NeuesBild=2;
				
				if(BG<30 || BG>600)
					NeuesBild=3;
				
				if(i>=240 && NeuesBild==0)
					NeuesBild=1;
			}
		}
		
		//g.setClip(lira+FeldgrösseX/2-70,390,140,140);
		g.setClip(lira+FeldgrösseX+30,300,140,140);
		if( NeuesBild==0 && i<1){
			Feld.BildLöschen=1;
			Feld.paint(getGraphics());
		}
		
		else if(NeuesBild==1 && i>4){
			g.drawImage(img_pokal,lira+FeldgrösseX+30,300,140,140,this);	
			status.statusAusgeben("Congratulations");
			
		}
			
		
		else if(NeuesBild==2 && i>4 && BildAusgegeben==0){
			g.drawImage(img_doc,lira+FeldgrösseX+30,300,140,140,this);
			status.statusAusgeben("Please call your doc! You need help");
			BildAusgegeben++;
		}
		
		else if(NeuesBild==3 && i>4 && BildAusgegeben==1){
			g.drawImage(img_rip,lira+FeldgrösseX+30,300,140,140,this);
			status.statusAusgeben("Sorry,you're dead!");
			BildAusgegeben++;
		}
		
		
		/*rootPane.setVisible(true);
		getContentPane().setVisible(true);
		this.setVisible(true);
		setVisible(true);*/
	}		

	
	

	public void stop(){
		stopThread=true;
		thread=null;
		init=0;
		System.out.println("in stop");
		//setVisible(true);
	}
	
	public void destroy(){
		
	}
	
	
	public void esseninit(){
		Glucose=berechnungen.randomGlucose();
		//Essenszeiten speichern
		Morgenessen=berechnungen.mealtime(60);
		Mittagessen=berechnungen.mealtime(110);
		Abendessen=berechnungen.mealtime(170);
		mealtime=Morgenessen;
		
	}
}
```


was ich bis jetzt noch gesehen habe, ist:
Solange das Game nicht läuft, wird wenigstens das Feld neu gezeichnet, beim minimieren und wieder maximieren, aber diverse Bilder und JLabels, die in Feld.paint() gezeichnet werden sollten, werden nicht mehr gezeichnet.


----------



## MPW (10. Aug 2005)

Versuch mal nicht einfach repaint, sondern die ienzellenn Panaels und was du sonst noch hast zu repaintenn...

Ich würde es gerne Testen, aber das scheint nicht der ganze Code zu sein - das scheints noch eine classe bedienfeld zu geben habe ich beim überfliegen gesehen - ..wenn es dir egal ist, könntest du ihn auch posten, dann können wir ihn runterladen und dranrumspielen bis es geht...aber musst du wissen, wenn du das nicht willst, dann versuchen wir natülrich dir so zu helfen


----------



## Sky (10. Aug 2005)

MPW hat gesagt.:
			
		

> und dranrumspielen bis es geht...


Keine professionelle Herangehensweise... zumindest nicht beim Programmieren...


----------



## MPW (10. Aug 2005)

sky80 hat gesagt.:
			
		

> MPW hat gesagt.:
> 
> 
> 
> ...



Wie sonst, 10.000 Bücher lesen, bis man weiß, was man falsch gemacht hat?
Ne danke - ich probiere da lieber 1 2 Sachen aus und meistens geht's dann...


----------



## MarioLemieux (10. Aug 2005)

Hallo
Ich werde das ganze Projekt heute Nachmittag/Abend mal online stellen.
Vielleicht sieht/ findet/ spielt rum ( ist mir eigentlich egal  8)  ) jemand gerade etwas. Wäre Euch auf jeden Fall sehr dankbar, da ich schon ca 10 Stunden selber investiert habe.


----------



## MarioLemieux (11. Aug 2005)

Hallo zusammen, hier ist jetzt noch das ganze Projekt.
Und wenn dann noch jemand gerade sehen würde, warum die Menubar und die Kurzbeschreibung manchmal einfach nicht gezeichnet werden, wäre ich Euch auch sehr dankbar!


Hier mal der Link zur Seite mit dem Java-Applet:
http://www.datacomm.ch/r.s/fuer Forum/ArtDiabv2_2/ArtDiab_v2.htm

und hier das Projekt:
www.datacomm.ch/r.s/fuer%20Forum/ArtDiabv2_2.zip

Auf jeden Fall schon jetzt vielen Dank an alle die, die sich die Zeit nehmen, schnell reinzuschauen.


----------



## MPW (11. Aug 2005)

Okay..habe gerade nicht so viel Zeit zum Testen werde es mir aber nochmal genauer ansehen:

Also, irgendwie habe ich das Gefühl, der IE ruft die start() Methode nicht auf, hab' mal follgende Zeile an den Anfang gesetzt:


```
JOptionPane.showMessageDialog(this, "Start aufgerufen", "Start aufgerufen", JOptionPane.INFORMATION_MESSAGE);
```

Im Appletviewer sehe ich nach dem miniieren wiederherstellen das Fenster...im Internetexplorer kommt es nur einmal, nämlich beim laden der Seite...?? Was soll dass...?

Aber irgendwie ist das komisch, hab' in die init() auch noch einen ähnlich Eintrag(halt mit Init aufgerufen) gesetzt, den sehe ich nie...Im Appletviewer sehe ich dagegen tadellos erst das eine Fenster dann das andere...

Zwei Vorschläge...arbeite mal heraus, welche Komponenten genau repaintet werden müssen und mache das mit den entsprechenden Containern mal einzeln..wenn ich Zeit habe werde ich mal weiterexpimentieren...

Diese setzt du dann mal explizit in die start()-Methode..

Oder du baust einen Thread der einfach alle halbe oder ganze Sekunde repaintet..falls die start() wirklich nicht sauber arbietet, was ich mir aber nicht vorstellen kann....

//edit: dieses Forum hat auch einen blöden bug...wenn man über einen email-link den Thread aufruft ist man laut verlinkung auf der ersten Seite auch wenn's schon die zweite ist, man kann nämlich die 1 dann nicht anklicken, bloß die zwei, die dann den Effekt eines reloads hat

//edit: okay, das mit init war falsch..hab' den Eintrag erst zu früh dann zu spät gemacht..jetzt kommt er, aber die start sehe ich jetzt immer noch nur am Anfang, später nicht mehr..

*//final edit: Okay sorry, für die vielen eidts..gibt halt ordentliche und chaotische Menschen, wie gut das ihr meinen Schreibtisch nicht sehen könnt;-): Also, der IE ruft weder start() nocht stop() bei minimieren auf, d.h. du musst einen Thread basten...wie oben vorgeschlagen der das repainten vornimmt. Dies habe ich mit JOptionpanes und diversen System.out.println("Start anfang - mitte oder ende usw...") gemessen...ich weiß nicht wie's in anderen Browser aussieht, da nicht nur den IE verwende, vielleicht könnte das mal jemannd anderes testen..ich könnte höchstens nochmal unter knoppix gucken..*


----------



## MarioLemieux (17. Aug 2005)

Vielen Dank für deine Tests.. das ist so ziemlich auch das, was ich rausgefunden habe.

Kannst du mir vielleicht gerade helfen mit einem 2ten Thread? Irgendwie check ich nicht ganz, wie ich das machen muss.


----------



## MPW (17. Aug 2005)

nah ganz einfach:
der endet in einer Endlosschleife:
	
	
	
	





```
while(true) {
    //alle Komponenten repainten
    try{
    sleep(1000);
} catch (InterruptedException e) {
    System.out.println(e);
}
}
```

und das rufst du halt als Thread auf und fügst die zu repaintenden Komponenten ein...auch eine Menüleiste![/quote]


----------



## MarioLemieux (17. Aug 2005)

sorry, irgendwie steh ich jetzt gerade auf der Leitung...
ich habe jetzt eine neue Klasse wait gemacht


```
import java.awt.Graphics;

public class Wait extends Thread {
	GUI_Feld Feld;
	Start start;
	Graphics g;
	boolean loop = true;

	public Wait(GUI_Feld Feld, Start start, Graphics graphics) {
		this.Feld = Feld;
		this.start = start; 
		this.g = graphics;
	}
	


	public  void WaitAndRefresch(){
		while(loop){
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) { }
			//Warte (wenn möglich) 1s
			Feld.paint();
			start.paint(g);
			System.out.println("in WaitAndRefresh");
		}
		
	}

}
```

und die rufe ich wie folgt auf

```
while(SimuLoop>240 | (bedienfeld.StartGedrückt==0 | bedienfeld.NameOk==0)){
				wait.loop=true;
				wait.WaitAndRefresch();

				System.out.println("kurz vor WaitAndRefresh");
			}

wait.loop=false;
```

aber irgendwie will das nicht so laufen, wie ich das gerne hätte...

edit: was ich eigentlich machen möchte ist:
den bestehenden Thread belassen wie er ist und zusätzlich alle sekunde alles neu painten lassen ( soviel ich gemerkt habe, reicht repaint nicht...)



edit: so, habs jetzt zum laufen gebracht, aber eben, es flackert wie blöde!

      Gibt es irgend einen Befehl, mit dem man herausfindet ob es noch das aktive Fenster ist???


----------



## MPW (17. Aug 2005)

ne..wen Java das wüsste würde es das ja schon selber tun.
Du kannst das aber mit Doublebuffering klein kriegen..musst mal in einem Javabuch über Flackern reduzieren was lesen..da steht's erklärt...(das ist das gleiche Problem wie bei Animationen, musst also irgendwo in dem Kapitel gucken)


----------



## L-ectron-X (17. Aug 2005)

Oder Forumsuche:
http://www.java-forum.org/de/viewtopic.php?t=5115


----------

