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();
}
}
[/代码]
答案 0 :(得分:2)
getResourceAsStream
方法如果找不到您要求的资源,则返回null
。您的代码不会检查null
,这是您的NPE的原因。
所以解决方案是:
检查文件是否确实存在于JAR中,该文件应存在于该位置。
将路径名更改为您使用该方法的方式。
注意:如果您尝试将文件命名为JarFileRead
,则需要执行此操作:
JarFileRead.class.getResourceAsStream("gmor.wav");
您当前的方式应该解析相对于命名空间根的相对路径;即它相当于要求"/gmor.wav"
。但这就是你的意思,写起来更简单,更清晰:
JarFileRead.class.getResourceAsStream("/gmor.wav");