1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Java fatal error der JVM

  • Nicholas1991
  • 9. August 2010 um 13:05
  • Unerledigt
  • Nicholas1991
    9
    Nicholas1991
    Mitglied
    Punkte
    770
    Beiträge
    122
    • 9. August 2010 um 13:05
    • #1

    Das Problem

    Zitat


    #
    # A fatal error has been detected by the Java Runtime Environment:
    #
    # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000006d5c3ec6, pid=4252, tid=644
    #
    # JRE version: 6.0_21-b07
    # Java VM: Java HotSpot(TM) 64-Bit Server VM (17.0-b17 mixed mode windows-amd64 )
    # Problematic frame:
    # C [jsound.dll+0x13ec6]
    #
    # An error report file with more information is saved as:
    # E:\Java\Projekte\Tetris\hs_err_pid4252.log
    #
    # If you would like to submit a bug report, please visit:
    # http://java.sun.com/webapps/bugreport/crash.jsp
    # The crash happened outside the Java Virtual Machine in native code.
    # See problematic frame for where to report the bug.
    #

    Alles anzeigen



    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:

    Code
    public class PlayWaveThread extends Thread {
        private String filename;
        private final int BUFFER_SIZE = 524288; // 128Kb
        public PlayWaveThread(String filePath) {
            filename = filePath;
        }
        public void run() {
            File soundFile = new File(filename);
            if (!soundFile.exists()) {
                System.err.println("Wave file not found: " + filename);
                return;
            }
            AudioInputStream audioInputStream = null;
            try {
                audioInputStream = AudioSystem.getAudioInputStream(soundFile);
            } catch (Exception e) {
                e.printStackTrace();
                return;
            }
            AudioFormat format = audioInputStream.getFormat();
            SourceDataLine audioLine = null;
            DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
            try {
                audioLine = (SourceDataLine) AudioSystem.getLine(info);
                audioLine.open(format);
            } catch (Exception e) {
                e.printStackTrace();
                return;
            }
            audioLine.start();
            int bytesRead = 0;
            byte[] audBuffer = new byte[BUFFER_SIZE];
            try {
                while ( (bytesRead=audioInputStream.read(audBuffer, 0, audBuffer.length)) != -1 ) {
                    audioLine.write(audBuffer, 0, bytesRead);
                }
                audioInputStream.close();
            } catch (Exception e) {
                e.printStackTrace();
                return;
            } finally {
                audioLine.drain();
                audioLine.close();
            }
        }
    }
    Alles anzeigen



    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 :grinning_squinting_face:

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    Punkte
    6.173
    Beiträge
    1.181
    • 9. August 2010 um 18:58
    • #2

    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*

  • Nicholas1991
    9
    Nicholas1991
    Mitglied
    Punkte
    770
    Beiträge
    122
    • 9. August 2010 um 22:02
    • #3

    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.

  • tobias
    8
    tobias
    Mitglied
    Reaktionen
    3
    Punkte
    688
    Beiträge
    136
    • 9. August 2010 um 22:22
    • #4

    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.

  • Ramses13
    4
    Ramses13
    Mitglied
    Reaktionen
    4
    Punkte
    164
    Beiträge
    31
    • 10. August 2010 um 11:47
    • #5
    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.

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

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

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung