gpt4 book ai didi

java.io.IOException : mark/reset not supported (for static) 异常

转载 作者:行者123 更新时间:2023-11-29 06:03:30 28 4
gpt4 key购买 nike

所以我遇到了与 java.io.IOException: mark/reset not supported 相同的问题.

我希望它如何工作:

  • 让程序打开一个弹出按钮,上面写着“点击我播放”
  • 一旦用光标单击,将永远播放 2MB_sound.wav(是的,它的大小为 2MB)

问题是什么:

不知何故,我编写的名为 backgroundPlayer 的代码在我的 uni comps 中的一个桌面上完全可以正常工作,但在我的笔记本电脑上却不行。在我的笔记本电脑上运行代码时,弹出按钮可以正常工作,但是当我单击它时...它会出现错误“java.io.IOException:不支持标记/重置”。

我为尝试解决问题所做的工作但失败了(来自上面的答案的链接):

InputStream audioSrc = getClass().getResourceAsStream("2MB_sound.wav");
InputStream bufferedIn = new BufferedInputStream(audioSrc);
AudioInputStream audioStream = AudioSystem.getAudioInputStream(bufferedIn);

我尝试添加与上面完全相同的代码(使用相关导入),但它给了我一个不同的错误,提示“无法从 Object 类型对非静态方法 getClass() 进行静态引用”。所以现在我被卡住了,回到下面发布的原始代码。

请帮我解决我的问题。

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
import javax.swing.JButton;
import javax.swing.JFrame;

public class backgroundPlayer {

public static void main(String[] args) {

JFrame frame = new JFrame();
frame.setSize(200,200);
JButton button = new JButton("Click me to play");
frame.add(button);
button.addActionListener(new AL());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}

public static class AL implements ActionListener {
public final void actionPerformed (ActionEvent e) {
music();
}
}

public static void music () {
try {
Clip clip = AudioSystem.getClip();
AudioInputStream inputStream = AudioSystem.getAudioInputStream(new FileInputStream("85046_newgrounds_parago.wav"));
clip.open(inputStream);
clip.loop(Clip.LOOP_CONTINUOUSLY);
} catch (IOException e) {
e.printStackTrace();
} catch (LineUnavailableException e) {
e.printStackTrace();
} catch (UnsupportedAudioFileException e) {
e.printStackTrace();
}
}

最佳答案

我不得不处理一个非常相似的问题,并将其发布在这里:

mark/reset exception during getAudioInputStream()

这种形式:.getResourceAsStream(fileName) 返回一个 InputStream,如果文件不可标记,它会抛出标记/重置异常。我得到的解释是,曾经有一个默认的“第一次猜测”.wav,但这不再是第一次猜测(从 Java 7 开始)。在 Oracle 的错误数据库 #7095006 中有更好、更全面的描述。

使用这种形式应该没问题,因为它不需要支持标记和重置的中间步骤(InputStream):

URL url = AudioMixer.class.getResource(fileName); 
AudioInputStream ais = AudioSystem.getAudioInputStream(url);

关于java.io.IOException : mark/reset not supported (for static) 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9322651/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com