Как читать медиа-файлы (аудиофайлы, а не текстовые файлы) в jar-файле? - PullRequest
1 голос
/ 31 марта 2012
    Media.jar
    |--gmor.wav
    +--some.txt

приведенный ниже код может не сработать, чтобы получить входящий поток, и выбрасывает java.lang.NullPointerException.
input = JarFileRead.class.getClassLoader (). getResourceAsStream ("some.txt"); может работать.

[код]

import java.io.*;
public class JarFileRead
{
public static InputStream input = null;
public JarFileRead()
   {
       try
       {
           input = JarFileRead.class.getClassLoader().getResourceAsStream("gmor.wav");

           while(input.read()!=-1)
           {

               System.out.print(input.read());
           }
           input.close();
       }
       catch(Exception e)
       {
           e.printStackTrace();
       }
   }
public static void main(String [] args)
{
   new JarFileRead();
}

}

[/ код]

1 Ответ

2 голосов
/ 31 марта 2012

Метод getResourceAsStream возвращает null, если не удается найти запрашиваемый ресурс.Ваш код не проверяет null, и это является причиной ваших NPE.

Итак, решение:

  • Проверьте, что файл действительно существуетв JAR, в месте, где он должен существовать.

  • Измените путь, чтобы он был правильным для способа, которым вы используете этот метод.


Примечание: если вы пытались назвать файл относительно JarFileRead, вам нужно сделать это:

JarFileRead.class.getResourceAsStream("gmor.wav");

То, как вы это делаете в настоящее время, должно разрешать относительные путиотносительно корня пространства имен;то есть это эквивалентно запросу "/gmor.wav".Но это то, что вы имеете в виду, проще и понятнее написать:

JarFileRead.class.getResourceAsStream("/gmor.wav");
...