2012-03-31 58 views
1
Media.jar 
    |--gmor.wav 
    +--some.txt 

下面的代码无法工作以获取输入流,并抛出 java.lang.NullPointerException。
input = JarFileRead.class.getClassLoader()。getResourceAsStream(“some.txt”);能行得通。如何在jar文件中读取媒体文件(音频文件,而不是文本文件)?

[代码]

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(); 
} 

}

[/代码]

+0

请注意,JavaSound已知呛在'不可重新定位'的输入流。从'getResourceAsStream'返回的流显然就是这样一个流。改用'getResource()'来取代'URL'。但是实施Stephen C 1st确定的修复,这是直接的问题。 – 2012-03-31 08:03:27

回答

2

getResourceAsStream方法返回null如果不能找到你要的资源。你的代码不检查null,这是你NPE的原因。

因此,解决办法是:

  • 检查该文件实际上存在于JAR,因为它应该存在的位置。

  • 将路径名更改为正确使用该方法的方式。


注意:如果你试图相对的文件名JarFileRead,那么你需要做的是:

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

的方式目前你正在做它相对应解析相对路径到命名空间的根部;即相当于要求"/gmor.wav"。但这就是你的意思,它写得更简单,更清晰:

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