Programm stoppt bei JDialog.show()

TheBodo

Erfahrenes Mitglied
Hi ihr!

Ich hab mir schon viel Zeug aus eurem Forum geholt!
Und das hat mir bisher sehr viel weitergeholfen, aber jetzt find ich nichts mehr!

Ich arbeite mit nem JDialog und der existiert quasie immer, da er öfter aufgerufen wird.
Will ich diesen Dialog zeigen is auch alles ok (fast).
Im Programmcode geht er bis zur show()-Funktion von JDialog und zeigt ihn an, danach friet er ein! Warum?

Hier mal der Code:
Code:
	private JDialog gw = new JDialog(this, true);
	gw.setResizable(false);
	gw.setUndecorated(true);
	gw.setSize(250, 62);
	gw.setAlwaysOnTop(true);
	gw.setLocation(412, 289);
	ok.addActionListener(this);
	ok.setEnabled(false);
	gwpane.add(stat);
	gwpane.add(ok);
	x.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
	gw.add(gwpane);

            //Deklaration

            //Aufruf

	System.out.println("in wish()");
	gw.show();
	System.out.println("after show()");

und hier die entpsrechende Konsolenausgabe:

Code:
in wish()

Danke für eure Hilfe
 
Hallo,

dass das Programm anhält liegt daran, dass du modal auf true gesetzt hast. Dadurch wird die setVisible(true)-Funktion (solltest du statt show nehmen, show ist deprecated) erst beendet, wenn der Dialog wieder geschlossen wurde. Im javadoc stehts erklärt:
Notes for modal dialogs:
* setVisible(true): If the dialog is not already visible, this call will not return until the dialog is hidden by calling setVisible(false) or dispose.
wenn du das Programm weiterlaufen lassen willst, musst du entweder den Dialog auf nicht-modal setzen, oder setVisible in einem anderen Thread aufrufen:
Code:
System.out.println("in wish()");
new Thread() {
  public void run() { gw.setVisible(true); }
}.start();
System.out.println("after show()");
 
Danke erstmal, das funktioniert!

Aber wie sieht das dann mit dem Thread aus, wird der beendet sobald das Ding erzeugt ist?

Denn wenn bei dem öffnen (Was bis zu 1000 mal pro Runtime passieren soll) jedesmal ein neuer Thread entsteht und nicht wieder geschlossen wird hab ich ein Problem oder?
 
Doch, der Thread wird beendet. Der führt nur das aus, was in der run-Methode angegeben ist, also ist er, nachdem setVisible eine Rückgabe bekommen hat, fertig.
 
Zurück