LibGDX And​​roid项目中的NullPointerException

时间:2018-07-18 00:39:37

标签: android nullpointerexception libgdx

我一直在开发2D游戏(使用LibGDX),在进行Alpha测试期间,我在某些设备上崩溃了。在发布前的报告中,问题如下:

  

java.lang.NullPointerException:尝试在空对象引用上调用接口方法'void com.badlogic.gdx.audio.Music.setLooping(boolean)'

     
    

在com.bonbon.lubyjump.game.Game.initialiseSounds(Game.java:151)

         

在com.bonbon.lubyjump.game.Game.loadSounds(Game.java:147)

         

在com.bonbon.lubyjump.game.Game.create(Game.java:102)

         

atcom.badlogic.gdx.backends.android.AndroidGraphics.onSurfaceChanged(AndroidGraphics.java:311)

         

在android.opengl.GLSurfaceView $ GLThread.guardedRun(GLSurfaceView.java:1519)

         

在android.opengl.GLSurfaceView $ GLThread.run(GLSurfaceView.java:1240)

  

据我了解,setLooping()仅在没有“ Theme.wav”音频文件的情况下才会抛出上述错误。但是某些设备正在运行而没有崩溃的事实似乎表明音频文件确实存在。有什么我可能会忽略的东西可能会生成NullPointerException吗?我无法在Android Studio中的任何虚拟设备上重新创建该错误。

private void loadSounds() {
    try {
        themeSong = Gdx.audio.newMusic(Gdx.files.internal("Theme.wav"));
        gamePlaySong = Gdx.audio.newMusic(Gdx.files.internal("Gameplay.wav"));
        jumpSound = Gdx.audio.newSound(Gdx.files.internal("Jump.wav"));
        fartSound = Gdx.audio.newSound(Gdx.files.internal("Fart.wav"));
        gameOverSound = Gdx.audio.newSound(Gdx.files.internal("GameOver.wav"));
    } catch (Exception e) {
        e.printStackTrace();
    }
    initialiseSounds();
}

private void initialiseSounds(){
    themeSong.setLooping(true);  //This line causes the error
    themeSong.setVolume(soundVolume);
    themeSong.play();
    gamePlaySong.setVolume(soundVolume);
}

1 个答案:

答案 0 :(得分:0)

对于可能遇到相同问题的任何人,我发现某些设备崩溃是因为它们无法处理 wav 文件,这是我用于音频文件的格式。将它们转换为 mp3 后,此问题已解决,所有设备均可正常运行而不会崩溃。