我正在为一堂课写游戏,但却无法添加声音和图像。我们得到了安德鲁戴维森的杀手游戏编程书中的框架,我觉得我正在复制它,但每当我尝试播放声音或显示图像时我都会得到null。
文件名正确读取,但找不到声音。我在文件中有mp3。我想也许目录是错误的,所以我一直在/ Sounds和/ src / Sounds之间改变它,但它没有帮助。我完全卡住了。
编辑:在我刚刚发布的所有垃圾之后,这是一个在实例化之前传入imsLoader的简单问题。叹。我将检查soundLoader是否是同一个问题。谢谢你们。
编辑2:声音问题不一样。在为声音文件创建新的输入文件流时,我得到一个空结果。
这是更改URL后的SDL方法。
try {
java.net.URL inFile = this.getClass().getResource("/Sounds/SDLInfo.txt");
System.out.println("url " + inFile);
InputStreamReader in = new InputStreamReader(inFile.openStream());
if(in == null){
System.out.println("in is null wtf");
System.out.println("sndsFNm " + sndsFNm);
System.out.println("in contents " + this.getClass().getResourceAsStream(sndsFNm));
}
BufferedReader br = new BufferedReader(in);
StringTokenizer tokens;
String line, name, fnm;
while((line = br.readLine()) != null) {
if (line.length() == 0) // blank line
continue;
if (line.startsWith("//")) // comment
continue;
tokens = new StringTokenizer(line);
if (tokens.countTokens() != 2)
System.out.println("Wrong no. of arguments for " + line);
else {
name = tokens.nextToken();
fnm = tokens.nextToken();
load(name, fnm);
}
}
br.close();
}
catch (IOException e)
{ System.out.println("Error reading file: " + sndsFNm);
System.exit(1);
}
我在我的主类中调用此方法之前实例化SDL加载器,如下所示:
private static final String SDL_FILE = "SDLInfo.txt";
private SDLLoader sdlLoader;
//initialize loaders and start music
sdlLoader = new SDLLoader(SDL_FILE);
sdlLoader.play("bgmusic", true);
堆栈跟踪
url file:/C:/Documents%20and%20Settings/MyName/Desktop/java%20programs/Zombie%20City/bin/Sounds/SDLInfo.txt
Problem with Sounds/peaceful_music.mp3
-- bgmusic/peaceful_music.mp3
Reading file: Sounds/clipsInfo.txt
url file:/C:/Documents%20and%20Settings/MyName/Desktop/java%20programs/Zombie%20City/bin/Sounds/SDLInfo.txt
Problem with Sounds/peaceful_music.mp3
-- bgmusic/peaceful_music.mp3
答案 0 :(得分:0)
如果你得到一个NullPointerException,它可能来自这一行
image = imsLoader.getImage(imageName);
也许imsLoader
为空?
答案 1 :(得分:0)
不是尝试输入流,而是使用
形成一个URLthis.getClass().getResource("/Sounds/SDLInfo.txt"); // Note leading '/' - v. important.
我推荐此更改的原因是我知道 getResource(..)
方法会将前导/
解释为“从类的根搜索-path,而不是类“。
我从来没有明确指出getResourceAsStream(..)
如何对待领先的/
,但似乎......不同。