2009-03-09 17 views
2

次のコードは、私のJavaアプレットでサウンドファイルを再生するために使用されます。このJavaコードをどのように置き換えるのですか?

public synchronized void play() { 
    try { 
      //Here filename is a URL retreived through 
      //getClassLoader().getResource() 
      InputStream in = new FileInputStream(filename.getFile()); 
      AudioStream as = new AudioStream(in); 
      AudioPlayer.player.start(as); 

    } catch (IOException e) { 
      e.printStackTrace(); 
    } 

それは私がEclipseを使用してローカルでアプレットを実行したときに動作しますが、私は.jarでそれをパッケージとして、それを実行してみた場合Webブラウザのアプレットでは動作しません。このコードをコメントアウトすると、アプレットが機能します。

私は上記のコードをアプレットで使用できるように置き換える必要がありますか?

答えて

4

代わりに新しいFileInputStreamを(のクラスローダにgetResourceAsStream()を使用してみてください)。これにより、AudioStreamに渡すことができるInputStreamが返されます。だから、のようなもの:

InputStream in = getClassLoader().getResourceAsStream(getClassLoader().getResource()); 
AudioStream as = new AudioStream(in) 
3

new FileInputStream(...)の代わりにgetClassLoader().getResourceAsStream()を使用してください。ここにはローカルファイルはありません(jarファイルを使用している場合など)。基本的にはサウンドデータへのストリームを取得したいのですが、クラスパスからリソースを取得するときは、getResourceAsStream()がこれを行う最も簡単な方法です。

(あなたがしたいが、多くのポイントがない場合は、openStream()続いgetResource()を使用することができます。)

2

java.lang.ClassLoaderクラスのgetResourceAsStream()メソッドを見てください。

関連するファイルがCLASSPATHにあるかぎり、JARを持っていなくてもこれは動作します。

4

ClassLoader.getResourceAsStreamまたはURL.openStreamのいずれかを使用してください。リソースリークを避けるためにストリームを閉じることを忘れないでください。

また、AudioClipクラスがあなたのニーズに合ったかどうかを確認します。

private AudioClip sound = null; 

    private AudioClip getSound() { 
    if (sound == null) { 
     ClassLoader classLoader = TestApplet.class 
      .getClassLoader(); 
     URL url = classLoader.getResource("assets/sound.wav"); 
     sound = JApplet.newAudioClip(url); 
    } 
    return sound; 
    } 
関連する問題