# Statusmeldung anzeigen und nach gewisser Zeit ausblenden



## Guest (11. Aug 2008)

Hallo,

möchte eine Statusmeldung am Bildschirm ausgeben und diese nach einer bestimmten Zeit (verweildauer) wieder ausblenden (da im Hintergrund ein Report erstellt wird)

habs jetzt so versucht:


```
Statusmeldung statusmeldung = new Statusmeldung("Report","Report wird erstellt, einen Moment bitte...",300,300,200); 
	  statusmeldung.repaint();
	  report_vtb = new Report_VTB(db_verb, this, "KVR",f_xml_datei, f_html_datei);
	  statusmeldung.repaint();
	  statusmeldung.statusmeldung_ausblenden(3000);


classe Statusmeldung:
	public Statusmeldung(String caption, String text,int x_pos, int y_pos, int height)
	{
		super();
		this.setContentPane(getJContentPane());
		this.setBounds(x_pos, y_pos, 200, 600);
		this.setIconImage(java.awt.Toolkit.getDefaultToolkit().getImage("grafs/sanduhr.gif"));
		this.setTitle(caption);

		this.show();
		
	}

	private JPanel getJContentPane()
	{
		
		if (jContentPane == null)
		{
			jContentPane = new JPanel();			
			
			jLbl_2 = new JLabel("Test"); 
			jLbl_2.setBounds(40, 40, 100, 15);		
			jContentPane.add(jLbl_2); 
			jContentPane.setBackground(Color.red);
		}
				
		return jContentPane;
				
	}


Methtode statusmeldung.statusmeldung_ausblenden
	public void statusmeldung_ausblenden(int verweildauer)
	{
		try
		{
			Thread.sleep(verweildauer);
		}
		catch (Exception ex)
		{
			System.out.println("Statusmeldung.statusmeldung_ausblenden() "+ex.getMessage());
			
		}		
		this.dispose();
	}
```


problem ist (anscheinend), dass das System mit dem tatsächlichen grafischen Aufbau der klasse Statusmeldung noch nicht fertig ist, bevor der Code Thread.sleep(verweildauer); erreicht, da auf dem Statusfenster keinerlei Label (wird in der Methodeg etJContentPane() ja erstellt) erscheint.
(wenn ich nämlich this.dispose() weg nehme, dann wird das Label (und die Rotfärbung) nach der verweildauer Angezeigt/Aufgebaut.
Frage:
wie kann ich es machen, dass die Klasse Statusmeldung vorher einwandfrei aufgebaut wird, bevor eben der Code Thread.sleep(verweildauer) abgearbeitet wird.

Bin aber auch für andere Lösungsansätze dankbar.

christoph


----------



## SlaterB (11. Aug 2008)

der Code von Zeile 2-6 sollte nebenläufig von einem Thread ausgeführt werden,

solande du z.B. in einem ActionListener den AWT-Thread damit beschäftigst 
(Schlafen ist auch eine gewisse Beschäftigung), 
hat dieser keine Zeit zum Zeichnen


----------



## Guest (11. Aug 2008)

Hallo,

erstmal danke...

versteh nur nicht ganz, was die Auslagerung des ganzen codes in einen anderen Thread bringen soll (auch dort, wird ja dann dieser Thread angehalten und damit die Statusmeldung/frame nicht fertig gezeichnet)

christoph


----------



## SlaterB (11. Aug 2008)

es geht darum, ob der AWT-Thread warten muss (und nicht zeichnen kann)
oder ein anderen Thread warten muss (und der AWT-Thread Luft hat zu malen)

wenn dir 'AWT-Thread' an sich nix sagt, dann kann ich nur auf Literatur verweisen statt das alles zu erklären:
http://java.sun.com/products/jfc/tsc/articles/painting/


----------



## Guest (11. Aug 2008)

Hallo,

und danke nochmal....habs hingekriegt:

hab nicht die ganze "Sache" also nicht die Zeilen 2-6 ausgelagert, sondern "nur" das hochzählen und ausblenden in einene Eigenen Thread...das funktioniert dann..

Dein Hinweis hat mich zur Lösung geführt...danke

christoph


----------

