swing: whileschleife und jdialog verträt sich nicht?



  • tach

    ich habe eine while schleife welche solange "schleifen" soll bis sie eine antwort(ist irelevant) bekommen hat. in der Schleife wird ein jdialog angeizeigt , kurz gewartet und wieder geschlossen.

    pseudocode:

    jdialog foo.show();
    Thread.sleep(500);
    foo.dispose();

    das seltsame ist: der dialog wird angezeigt dann bleibt alles hängen. der Haupthread bleibt stehen, er fängt auch nicht an zu schlafen somit wird der dialog auch nicht wieder disposed. allerdings bleibt auch der dialog hängen denn er reagiert nicht mehr auf den OK-Knopdruck. wenn ich den dialog schliesse läft alles normal weiter.

    thx



  • ans klar

    Du hast ein Thread -> Dialog öffnen -> Sleep(500) (das ist das hängen bleiben)

    du benötigst einen zweiten Thraed -> FAQ


  • Mod

    Wenn ich das richtig gelesen habe, dann ist die while-Schleife dazu gedacht, zu warten, bis der Dialog geschlossen wird, oder? Das kannst du auch ohne while-Schleife haben. ...mit einem modalen Dialog.

    Methode : JDialog.setModal



  • beides falsch 🙂 vielleicht würde es mit einem zweiten thread gehen aber mir ist es trotzdem rätselhaft.

    @wurstnuss: ich muss den code verbessern:

    jdialog foo.show();
    System.out.println("TEST");
    Thread.sleep(500);
    foo.dispose();

    1. es wird kein test ausgegeben.
    2. irgenswann müsste der thread ja sugesschlafen haben und dann müsste es weitergehen.

    Aber es bleibt halt eifach alles hängen.

    @gregor: Nein die while schleife ist dazu da, das die gui im hintergrund auf Informationen wartet die von einer anderen Klasse irgendwann geliefert werden. erst wenn diese Inforationen da sind soll die while schleife beendet werden sollen. Währenddessen soll kurzzeitg ein dialog eingeblendet werden.



  • also wenn du diesen code so in der Art hintereinander stehen hast:

    jdialog foo.show();
    System.out.println("TEST");
    Thread.sleep(500);
    foo.dispose();

    Dann liegt dein Problem vor diesem Codeschnipsel.
    Hier müßte TEST ausgegeben werden, bevor er hängen bleibt, tuts das nicht, liegts weiter davor.

    Wo genau, kann ich dir aber auch nicht sagen, dafür hab ich zu wenig infos 🙂


  • Mod

    ...vielleicht ist der Dialog ja modal. Dann geht es nach show() erst weiter, wenn der Dialog geschlossen ist.

    ...natürlich ist auch hier die Methode Dialog.setModal zu empfehlen! 🙂



  • Gregor du bist ein Schatz. Danke! 🙂


Anmelden zum Antworten