0

.wav ファイルをメモリにロードしようとしていますが、ファイルが存在しないというメッセージが表示され続けます。

String filename;

public MyClass(String _filename){
 filename = _filename;
}

public void run(){
   InputStream in = View.class.getClassLoader().getResourceAsStream("/sounds/"+filename);

   File inputFile = new File(in.toString());
   if(!inputFile.exists()){
      System.err.println("Wave file not found: " + in.toString());
      return;
   }
}

コンソール:

Wave ファイルが見つかりません: java.io.FileInputStream@dd5b524

Wave ファイルが見つかりません: java.io.FileInputStream@570add96

ファイルはパッケージ フォルダーにあります。入った

myPackage/sounds/write.wav

編集:

実際にサウンドをロードしたい:

InputStream in = this.getClass().getResourceAsStream("sounds/"+filename);

AudioInputStream audioInputStream = null;
try { 
     audioInputStream = AudioSystem.getAudioInputStream(in);
} catch (UnsupportedAudioFileException e1) { 
         e1.printStackTrace();
         return;
} catch (IOException e1) { 
         e1.printStackTrace();
         return;
}

しかし、コンソールにはまだエラーがあります:

スレッド「Thread-6」での例外 スレッド「Thread-7」での例外 com.sun.media.sound.SoftMidiAudioFileReader.getAudioInputStream(Unknown Source) での java.lang.NullPointerException ) com.chrissman.threads.AePlayWave.run(AePlayWave.java:47) で java.lang.NullPointerException com.sun.media.sound.SoftMidiAudioFileReader.getAudioInputStream(不明なソース) で javax.sound.sampled.AudioSystem.getAudioInputStream(ソース不明) com.chrissman.threads.AePlayWave.run(AePlayWave.java:47)

4

2 に答える 2

1

in.toString()ストリームを開くために使用されたパスを返すのではなく、クラス名とそれに続くハッシュを返します: java.io.FileInputStream@dd5b524.

java.io.FileInputStream@dd5b524エラーは、現在のディレクトリに指定されたファイルがないために発生します。

ファイルを見つけたときnullではなく、オブジェクトを取得したためinです。オブジェクトを使用してこのファイルを取得することはできませんが、Fileオブジェクトを介してアクセスできinます。ストリームからコンテンツを読み取って使用します。

于 2013-01-22T18:15:06.280 に答える
0

リソースは、絶対パスと相対パスの両方で検索できます。現在持っているのは、で始まる絶対パス/です。に変更し/myPackage/sounds/write.wavます。一般に、相対パスではどのパッケージが「最新」であるかを判断するのが非常に難しいため、絶対パスを好みます。

于 2013-01-22T18:11:06.633 に答える