Problem z odtworzeniem pliku *.wav w pliku *.jar

0

Witam.

Napisałem program m.in. który odtwarza pliki *.wav, jeżeli wykonuje program w kompilatorze tj. w NetBeans to działa bezproblemowo, problem jest gdy chce go uruchomić bezpośrednio z pliku jar, program zgłasza wyjątek przy użyciu metody getResourceAsStream(strFilename), metoda zwraca wartość null. Wydaje mi się że problem wynika ze złej ścieżki dostępu do pliku wav.
W programie używam także plików png, png jak odpale plik jar działają, pliki *wav znajdują się w tym samym miejscu do pliki *png.

klasa odpowiedzialna za odtwarzanie pliku *wav

class MakeSound extends Thread implements LineListener {

private final int BUFFER_SIZE = 128000;
private File soundFile;
private AudioInputStream audioStream;
private AudioFormat audioFormat;
private  SourceDataLine sourceLine;
private String strFilename;
private boolean can_play;
private InputStream s_stream;

public MakeSound(String filename )
{
  strFilename = filename;
  can_play = false;
}        


public void run()
{
  while(true)
  {    
    try 
    {
      TimeUnit.NANOSECONDS.sleep(1);
    } 
    catch (InterruptedException ex) 
    {
      Logger.getLogger(Cnt_Thread.class.getName()).log(Level.SEVERE, null, ex);
    }
   
    if(can_play) 
    {
             
               try
               { 
                 
                 s_stream = this.getClass().getResourceAsStream(strFilename);  strFilename - scieżka dostępu do pliku
                 // Tutaj program się wysypuje,dlatego że s_stream = null 
               }
               catch(NullPointerException e)
               {
                 
               }    
                
               
              try 
              {
                 audioStream = AudioSystem.getAudioInputStream(s_stream);
              } 
              catch (Exception e)
              {
                e.printStackTrace();
               
                System.exit(1);
              }
              
         
              audioFormat = audioStream.getFormat();

              DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat);
              try {
                    sourceLine = (SourceDataLine) AudioSystem.getLine(info);
                    sourceLine.open(audioFormat);
              } catch (LineUnavailableException e) {
                e.printStackTrace();
                System.exit(1);
              } catch (Exception e) {
                e.printStackTrace();
                System.exit(1);
             }
            
             sourceLine.addLineListener(this);
             sourceLine.start();

             int nBytesRead = 0;
             byte[] abData = new byte[BUFFER_SIZE];
             while (nBytesRead != -1) {
                try {
                    nBytesRead = audioStream.read(abData, 0, abData.length);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                if (nBytesRead >= 0) {
                    @SuppressWarnings("unused")
                    int nBytesWritten = sourceLine.write(abData, 0, nBytesRead);
                }
             }

             sourceLine.drain();
             sourceLine.close();
             stop_sound();
        
   }
  }
}

wywołanie w metodzie main
move_drums = new MakeSound("res/sound/sound.wav");

Jak rozwiązać ten problem?

1

A czy relatywnie do cwd tego jara masz katalog res/sound/ ? No właśnie, nie masz.

0

Poszukałem na StackOverflow i poprawiłem na :

url = mainapp.class.getResource(strFilename);
audioStream = AudioSystem.getAudioInputStream(url);

i działa bezproblemu.

Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1