Переменная вдруг становится нулевой?

Хорошо, я знаю, как это смешно или отстойно, поэтому рискуя своей репутацией, я спрашиваю, как это возможно:

player = new MediaPlayerCompat();
player.setWakeMode(XenoAmpService.this, PowerManager.PARTIAL_WAKE_LOCK);
player.reset();
player.setOnPreparedListener(null);

try {
    player.setDataSource(spath);
    player.setAudioStreamType(AudioManager.STREAM_MUSIC); // NullPointerException?!?!?!

Обратите внимание, что AudioManager.STREAM_MUSIC является статическим (вставлено из источника Android):

public static final int STREAM_MUSIC = AudioSystem.STREAM_MUSIC;

Как это может создать NPE в этой строке с setDataSource, не вызывая его?

Примечание: я не могу отладить его, потому что он не на моей машине. Это аварийный рапорт. Бывает для одного пользователя, не бывает для других тысяч.

Примечание 2: spath также не является нулевым, он обрабатывается ранее в коде. player.setAudioStreamType также проверяет наличие возможных нулей, но код все равно не доходит до них...

Примечание 3: трассировка стека (не думаю, что это поможет, хотя)...

java.lang.NullPointerException: Attempt to invoke virtual method 'void pl.qus.xenoamp.helper.MediaPlayerCompat.setAudioStreamType(int)' on a null object reference
       at pl.qus.xenoamp.xenoservice.XenoAmpService$AggregateMediaPlayer.prepare(XenoAmpService.java:2433)
       at pl.qus.xenoamp.xenoservice.XenoAmpService$AggregateMediaPlayer.zastąpDrugi(XenoAmpService.java:2577)
       at pl.qus.xenoamp.xenoservice.XenoAmpService.zmieńDrugiWrapper(XenoAmpService.java:2238)
       at pl.qus.xenoamp.xenoservice.XenoAmpService$AggregateMediaPlayer$1$2$1.execute(XenoAmpService.java:2520)
       at pl.qus.threading.StoppableRunnable.run(StoppableRunnable.java:48)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
       at java.lang.Thread.run(Thread.java:818)

0 ответов

Другие вопросы по тегам