Java fatal error der JVM

  • Das Problem



    Und hier wie es dazu kommt:
    Ich habe ein Tetris spiel für mich und meine Freunde, Verwandte etc. programmiert mit dem man seinen Highscore online hochladen und dann vergleichen kann. Das Spiel läuft super auf Windows XP und Vista. Unter Windows 7 (x64 getestet) kommt es allerdings immer zu abstürzen. Und zwar immer dann, wenn der aktuell zu platzierende Klotz zu schnell hintereinander gedreht wird. Denn jedes mal wenn sich der Klotz dreht, wird ein Klick-Sound abgespielt. Das scheint zum Absturz zu führen, da:

    Zitat

    # Problematic frame:
    # C [jsound.dll+0x13ec6]



    Ein Beispiel-Programm liegt im Anhang.

    Hier der Thread der jedes Mal aufgerufen wird, wenn der Block gedreht wird:



    Ist ja im Prinzip das, was man überall im Internet zu Java und Sound findet, hab da das Rad jetzt nicht neu erfunden.
    Und wie gesagt, das Poblem trat bisher NUR bei Win7 x64 auf. Sowohl mit Onbard-Sound als auch mit Soundkarte (Realtek HD und Creative X-Fi).

    Freu mich auf eure Ideen :D

  • Idee 1: Bugreport senden.
    Idee 2: Überlegen, was bei so schnellen Tastendrücken passieren soll, und das implementieren. Wenn das überlappende Abspielen von Sounds Probleme macht, mußt du in irgendeiner Weise sicherstellen, daß immer nur eine Instanz deines Abspielthreads läuft.

    *plantsch*

  • Das nimmt aber das ganze Tetris-feeling, wenn der Sound hinterher hinkt. Hmm... so schnell ist wohl nicht mit ner Lösung zu rechnen wenn ich jetzt den Bug-report sende :shinner:, muss das wohl irgendwie anders in den Griff bekommen. Mal schauen. Ich meld mich wenn ich nen sinnvollen Workaround gefunden habe.

  • Das könnte ein JVM-Bug sein, vielleicht ist in der Sun-Bugdatenbank schon etwas dazu eingetragen.
    Hinkt der Sound wirklich hinterher, wenn du nur einen Thread verwendest? Für jedes Abspielen einen Thread zu Erzeugen ist auf jeden Fall nicht gerade ressourcensparend. Du könntest einen Thread-Pool (fixed, 1 Thread) verwenden und Runnable-Tasks zum Abspielen verwenden. Die Audiodaten zwischenzuspeichern und nicht jedes Mal aus der Datei zu laden ist wahrscheinlich auch sinnvoll, aber ich kenne die Sound-API nicht.

  • Zitat

    Das nimmt aber das ganze Tetris-feeling, wenn der Sound hinterher hinkt


    Es hinkt nicht hinterher, wenn man die Sound-Ausgabe vorher stoppt und dann noch einmal startet. Die überlagern sich dann zwar nicht, aber es hinkt auch nichts hinterher.
    Ob mehrere Threads oder nicht ist nicht so wichtig (man kann ja mit Thread.join schön auf das Ende eines anderen Threads warten), aber dem "Audiodaten zwischenspeichern und nicht jedesmal neu laden" schließe ich mich an.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!