Das Problem
ZitatAlles anzeigen
#
# 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.
#
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:
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