JavaProblem: JOptionPane.showMessageDialog

Hallo Community.
Ich hoffe, dass es Leute hier gibt die sich mit Java etwas auskennen. Ich habe ein Problem und zwar wenn ich das erste mal ein JOptionPane.showMessageDialog aufrufe und ihm auch den Parent (JFrame) mitgebe, gehts perfekt so wies soll.
 ->Programm hält an und läuft erst weiter wenn OK betätigt wurde.

Jetzt allerdings bei meinem Spiel, erscheint diese Meldung nur das erste mal, bei den restlichen sieht man dass etwas aufgeht und irgendwie sofort wieder schliesst (nicht lesbar, nur erkennbar, dass sich was getan hat) Aber es soll ja eben weiterhin so bleiben und die Dialogbox anzeigen...

Weiss jemand weshalb das so sein könnte?! :-S

Hab echt kein Schimmer...
Vielen Dank!

  1. moin JavaProblem :)

    Weiss jemand weshalb das so sein könnte?! :-S

    Das kann viele Gründe haben... einer wäre zum Beispiel dass das Ergebnis des Dialogs in einer globalen Variable gespeichert wurde (die nicht wieder zurückgesetzt wird)

    Aber das ist nur eine Mutmaßung - um dir wirklich helfen zu können wären ein oder zwei Codeschnipsel nicht schlecht.

    liebe Grüße aus Berlin
    lina-

    --
    Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
    1. moin JavaProblem :)

      salut!

      Ok, denke die ganze Funktion ist sinnlos zu posten, weil es wirklich an der Zeile liegen muss...
      Ich deklariere keine Variable für das, sondern will das einfach nur so auf diese Art aufrufen.

      JOptionPane.showMessageDialog(sSControl.viewSnake, "You are crashed!\nYou respawn again with "+sSControl.modelSnake.getLives()+" Live(s)!");

      Grüsse aus Luzern! =)

      1. moin JavaProblem :)

        Ok, denke die ganze Funktion ist sinnlos zu posten, weil es wirklich an der Zeile liegen muss...

        Das reicht leider nicht aus. Zumindest kann ich an dieser Zeile keinen formalen Fehler erkennen.
        Aber ich hätte da eine zweite Vermutung anzubieten: Setzt du irgendwo/irgendwann den Focus von sSControl.viewSnake?

        liebe Grüße aus Berlin
        lina-

        --
        Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
        1. moin JavaProblem :)

          Abend ;)

          Das reicht leider nicht aus. Zumindest kann ich an dieser Zeile keinen formalen Fehler erkennen.

          Ok, hier die Funktion:
            private void GameOver()
            {
              thSnake.interrupt();
              if (thSnake.isInterrupted())
              {
                if (sSControl.modelSnake.getLives() == 0)
                {
                  if (sSControl.checkHighscorelist())
                  {
                    String UserName = JOptionPane.showInputDialog(sSControl.viewSnake, "You are crashed and game over now!\nYou achieved "+sSControl.modelSnake.getPoints()+"!\n\nPlease enter your Username for the Highscorelist:");
                    sSControl.setHighscorelist(UserName, sSControl.modelSnake.getPoints());
                  }
                  else
                    JOptionPane.showMessageDialog(sSControl.viewSnake, "You are crashed and game over now!\nYou achieved "+sSControl.modelSnake.getPoints()+"!\n\nSorry, you are too bad for the Highscorelist!");
                  sSControl.stopGame();
                }
                else
                {
                  sSControl.modelSnake.setLives(sSControl.modelSnake.getLives()-1);
                  JOptionPane.showMessageDialog(sSControl.viewSnake, "You are crashed!\nYou respawn again with "+sSControl.modelSnake.getLives()+" Live(s)!");
                }
                thSnake.resume();
              }
              else
                GameOver();
            }

          Aber ich hätte da eine zweite Vermutung anzubieten: Setzt du irgendwo/irgendwann den Focus von sSControl.viewSnake?

          Ja im Konstruktor setFocusable(true); (Ob das da steht oder nicht, hat auf mein Problem allerdings keinen Einfluss!)

          1. moin JavaProblem :)

            Auch in dieser Funktion habe ich keinen Fehler gefunden, der für so ein Verhalten zuständig sein könnte.
            Aber ich habe zwei Tips für dich: Methodennamen wie gameOver() werden klein geschrieben und die resume()-Methode des Threads ist deprecated. Da solltest du dich mal nach Alternativen umsehen.
            Ich vermute den Fehler jetzt in der stopGame()-Methode.
            Um das ein bisschen einzugrenzen wäre Debugging hilfreich (zur Not auch einfache Ausgaben auf der Konsole).
            Wann tritt dieser Fehler auf? Wenn alle Leben weg sind und kein Highscore erreicht wurde? Oder auch wenn es eine Wiederholungsmöglichkeit gibt?

            liebe Grüße aus Berlin
            lina-

            --
            Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)