Я знаю, что это было задано несколько раз, но в некоторых сценариях это по-другому, поэтому я не могу понять это. Когда я запускаю свою игру в Eclipse, все идет гладко, и игра работает отлично, но после ее экспорта она рушится. Я могу открыть игру и передвигаться в меню, но звуки не воспроизводятся, и после того, как я нажму игру, игра просто зависает, и она дает мне эту ошибку с cmd (я могу вставить любой класс, но, надеюсь, нужен только класс Audio) :java.io.IOException: отметка/сброс не поддерживается
java.io.IOException: mark/reset not supported
at java.util.zip.InflaterInputStream.reset(Unknown Source)
at java.io.FilterInputStream.reset(Unknown Source)
at com.sun.media.sound.SoftMidiAudioFileReader.getAudioInputStream(Unknown Source)
at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)
at com.neet.Audio.JukeBox.load(JukeBox.java:26)
at com.neet.GameState.IntroState.<init>(IntroState.java:28)
at com.neet.GameState.GameStateManager.loadState(GameStateManager.java:48)
at com.neet.GameState.GameStateManager.setState(GameStateManager.java:72)
at com.neet.GameState.GameStateManager.<init>(GameStateManager.java:31)
at com.neet.Main.GamePanel.init(GamePanel.java:70)
at com.neet.Main.GamePanel.run(GamePanel.java:75)
at java.lang.Thread.run(Unknown Source)
А вот аудио класс: `
package com.neet.Audio;
import java.util.HashMap;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
public class JukeBox {
private static HashMap<String, Clip> clips;
private static int gap;
private static boolean mute = false;
public static void init() {
clips = new HashMap<String, Clip>();
gap = 0;
}
public static void load(String s, String n) {
if(clips.get(n) != null) return;
Clip clip;
try {
AudioInputStream ais =
AudioSystem.getAudioInputStream(
JukeBox.class.getResourceAsStream(s)
);
AudioFormat baseFormat = ais.getFormat();
AudioFormat decodeFormat = new AudioFormat(
AudioFormat.Encoding.PCM_SIGNED,
baseFormat.getSampleRate(),
16,
baseFormat.getChannels(),
baseFormat.getChannels() * 2,
baseFormat.getSampleRate(),
false
);
AudioInputStream dais = AudioSystem.getAudioInputStream(decodeFormat, ais);
clip = AudioSystem.getClip();
clip.open(dais);
clips.put(n, clip);
}
catch(Exception e) {
e.printStackTrace();
}
}
public static void play(String s) {
play(s, gap);
}
public static void play(String s, int i) {
if(mute) return;
Clip c = clips.get(s);
if(c == null) return;
if(c.isRunning()) c.stop();
c.setFramePosition(i);
while(!c.isRunning()) c.start();
}
public static void stop(String s) {
if(clips.get(s) == null) return;
if(clips.get(s).isRunning()) clips.get(s).stop();
}
public static void resume(String s) {
if(mute) return;
if(clips.get(s).isRunning()) return;
clips.get(s).start();
}
public static void loop(String s) {
loop(s, gap, gap, clips.get(s).getFrameLength() - 1);
}
public static void loop(String s, int frame) {
loop(s, frame, gap, clips.get(s).getFrameLength() - 1);
}
public static void loop(String s, int start, int end) {
loop(s, gap, start, end);
}
public static void loop(String s, int frame, int start, int end) {
stop(s);
if(mute) return;
clips.get(s).setLoopPoints(start, end);
clips.get(s).setFramePosition(frame);
clips.get(s).loop(Clip.LOOP_CONTINUOUSLY);
}
public static void setPosition(String s, int frame) {
clips.get(s).setFramePosition(frame);
}
public static int getFrames(String s) { return clips.get(s).getFrameLength(); }
public static int getPosition(String s) { return clips.get(s).getFramePosition(); }
public static void close(String s) {
stop(s);
clips.get(s).close();
}
}`
У меня нет прямого знания о том, как работает аудиоподсистема, но из трассировки стека кажется, что 'AudioSystem.getAudioInputStream (...)' хочет что-то, что поддерживает mark/reset, но конкретный класс, возвращаемый 'getResourceAsStream 'не поддерживает его. Вы используете это из файла jar, где звук также находится в файле jar? Это может быть недопустимо, так как член jar (zip), вероятно, читается только вперед и вряд ли будет поддерживать поиск. –
Звуки в пакете Ресурсы как файлы .wav и .mp3. Это влияет на это? – user1766089
Ключ состоит в том, упакован ли все это (код и звуки) в файл jar, и вы запускаете его с помощью java -jar filename.jar. Если это правда, вам может потребоваться скопировать звуковые файлы во временные файлы на диске. –