1

我正在为班级编写游戏,但无法添加声音和图像。我们从 Andrew Davison 的 Killer Game Programming 一书中获得了可以使用的框架,我觉得我正在完全复制它,但每当我尝试播放声音或显示图像时,我都会得到空值。

文件名读取正确,但没有找到声音。我在文件中有 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
4

2 回答 2

0

如果您收到 NullPointerException,它可能来自这一行

image = imsLoader.getImage(imageName);

也许imsLoader是空的?

于 2013-03-09T17:28:29.293 回答
0

不要尝试输入流,而是使用

this.getClass().getResource("/Sounds/SDLInfo.txt"); // Note leading '/' - v. important.

我推荐此更改的原因是我知道getResource(..)方法会将前导解释为/从类路径的根目录搜索,而不是类的包”。

我从来没有确切地确定如何getResourceAsStream(..)对待领先/,但它似乎..不同。

于 2013-03-09T18:42:33.180 回答