2012-03-31 59 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");