modaler JDialog legt anwendungscode lahm

  • Themenstarter Themenstarter Roar
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
R

Roar

Gast
hi
ich hab einen modalen dialog, um anzuzeigen, dass eine email gesendet wird.
sobald ich den dialog aber anzeige, wird der code danach nicht mehr ausgeführt....
wenn ich den dialog nicht-modal mache geht's..

wieso, und wie kann man das ändern? synchronisieren, oder wie?
 
Wenn dein modaler Dialog wieder geschlossen ist, wird der Code weitergeführt.

Ich möchte dich bitten meinen Wahlspruch zu lesen (links unter meinem Namen) :wink:

Genau das ist der Sinn eines modalen Dialoges, er soll alles stoppen! Und wie du selbst sagst, einfach auf nicht-modal setzen.
 
hehe ja der spruch ist gut.. aber eigentlich sollte man einen dialog sehen, wo ne progress bar drin ist, die anzeigt dass grad die mail geschickt wird. jetzt wird die mail zwar geschickt, aber man sieht nur ein fenster, aber ohne die swing komponenten :? naja egal -> "liegt an windows" 😀
 
Ach so :idea:

Nun, das Stichwort heisst "Thread":

Du machst einen Thread, der dein Mail verschickt. Nachdem Du ihn gestartet hast, öffnest Du einen modalen Dialog, der die Progressbar anzeigt.

Du musst dir noch ein sicheres System überlegen, wie der Dialog wieder geschlossen wird (von innerhalb des Threads), aber diesen ganzen Ablauf kannst Du (mittels inneren Klassen, und dem Keyword final) innerhalb einer Methode schreiben.

mfg Beni
 
joa daran hab ich auch schon gedacht, aber ich denke ich lasse es jetzt so... cuz It's a feature 😉 und ich hab besseres zu tun als ProgressBars zu proggen 😉
 
Also mal ehrlich, das hat man in 10 Zeilen (faule Ausreden die du da hast :wink: )

Code:
public void doSomething(){
  final JProgressBar progress = new JProgressBar();
  JDialog dialog = new JDialog(); 
  dialog.getContentPane().add( progress );
  dialog.setDefaultCloseOperation( JDialog.DO_NOTHING );
  dialog.pack();

  Thread thread = new Thread(){
    public void run(){
      doSomethingImpl( progress );

      // es gibt sicher schönere Wege den Dialog zu schliessen, aber mir fällt keiner ein :-(
      while( true ){
        if( dialog.isVisible() ){
          dialog.setVisible( false );
          return;
        }
        try{
          Thread.sleep( 100 );
        } catch( InterruptedException ex )
      }
    }
  }

  thread.start();
  dialog.setVisible( true );
}

public void doSomethingImpl( JProgressBar progress ){
  (...)
}
 
jajaa is ja gut, ich schau mal 😉 😉 aber in meinem prog gibt's erstmal wichtigeres zu tun :roll: :roll:
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben