2012-02-17 27 views
1

java.io.IOException: mark/reset not supportedと同じ問題があります。 java.io.IOException:マーク/リセットがサポートされていません(静的な場合)

は、私はそれが仕事をしたい方法:

  • プログラムは、「再生するために私をクリックしてください」というポップアップボタンを開くください
  • 一度(はいその2メガバイトで2MB_sound.wavを再生しますカーソルでクリックサイズ)永遠

問題とは何か:

どういうわけかbackgroundPlayerは完全に私のユニカンプにデスクトップのいずれかに正常に動作しなく、私の中で呼び出され、私が書いたコードラップトップ。私のラップトップでコードを実行すると、ポップアップボタンは機能しますが、クリックするとエラー "java.io.IOException:mark/reset not supported"が表示されます。

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

私は(該当する輸入で)正確に上記のようなコードと付け加えてみましたが、それは私に与えた:私は、問題を解決しようとするために行われますが(答えの上記のリンクから)失敗した何

別のエラーが「型オブジェクトから非静的メソッド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(); 
    } 
} 

}リンク質問に

答えて

2

私は非常に同様の問題に対処しなければならなかった、そしてそれをここに投稿:

mark/reset exception during getAudioInputStream()

このフォームを:.getResourceAsStream(filename)は、場合マーク/リセット例外をスローInputStreamを返します。このファイルはマーク可能ではありません。私が得た説明は、以前は.wavの "最初の推測"があったが、これはもはや最初の推測ではない(Java 7以降)。 #7095006のOracleのバグデータベースには、より詳細な説明があります。あなたは たAudioInputStream audioStream =のAudioSystemに答えるため

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

にも投稿しました。これは、https:// forumsにも投稿されています。 oracle.com/forums/thread.jspa?threadID=2289395&tstart=0 –

1

は、基礎となるデータストリームは、異なるビットを構築しているので、あなたは解決策を適応する必要があります。

の代わりにこの:

InputStream audioSrc = getClass().getResourceAsStream("2MB_sound.wav"); 

これを使用します。

InputStream audioSrc = new FileInputStream("85046_newgrounds_parago.wav"); 
+0

THX:それは&リセットをマーキングサポートする必要がある中間段階(InputStreamを)必要としないため

このフォームを使用しては、あなたは、大丈夫でなければなりません。 getAudioInputStream(bufferedIn); しかし、このコードでは、 "java.io.IOException:マーク/リセットがサポートされていません " – compski

0

このコードはコンパイルされます。

import java.awt.event.*; 
import javax.swing.*; 
import javax.sound.sampled.*; 
import java.io.*; 

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 { 

    backgroundPlayer bp = new backgroundPlayer(); 

    public final void actionPerformed (ActionEvent e) { 
     bp.music(); 
    } 
} 

public void music() { 
    try { 
    InputStream audioSrc = getClass(). 
     getResourceAsStream("85046_newgrounds_parago.wav"); 
    InputStream bufferedIn = new BufferedInputStream(audioSrc); 
    AudioInputStream audioStream = 
     AudioSystem.getAudioInputStream(bufferedIn); 

    Clip clip = AudioSystem.getClip(); 
    clip.open(audioStream); 
    clip.loop(Clip.LOOP_CONTINUOUSLY); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (LineUnavailableException e) { 
     e.printStackTrace(); 
    } catch (UnsupportedAudioFileException e) { 
     e.printStackTrace(); 
    } 
} 
} 
+0

あなたのコードをコンパイルしようとしましたが、" java.io.IOException:Stream closed "というエラーが表示されました – compski

+0

私は通常これを行う方法は' byte [] ' –

+2

私はこの「java.io.IOException:Stream closed」を –

関連する問題