SurfaceHolder.lockCanvas() возвращает значение null, даже если оно было доступноAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 SurfaceHolder.lockCanvas() возвращает значение null, даже если оно было доступно

Сообщение Anonymous »

У меня есть игра для Android, и я получаю отчеты о сбоях NullPointers при попытке использовать холст. Я могу предположить, что это потому, что SurfaceHolder.lockCanvas() возвращает значение null, однако он делает это в середине игрового процесса, потому что в зависимости от места сбоя SurfaceHolder.lockCanvas() хотя бы один раз вернул действительный холст.

Это сложно отладить, потому что я не могу воссоздать это на своем собственном устройстве, что заставляет меня задуматься, связано ли это с конкретными устройствами. Единственный намек, который у меня есть, это то, что одним из устройств, на которых это произошло, был Nexus 7.

ПРИМЕЧАНИЕ. Это не та же проблема, что и мой вопрос с аналогичным названием. . Другой вопрос возник из-за попытки использовать холст до того, как он был доступен, тогда как здесь он был доступен.

Ниже приведен образец моего код:

public class GameView extends SurfaceView implements SurfaceHolder.Callback
{
class GameThread extends Thread
{
@Override
public void run()
{
while (running)
{
Canvas c = null;
try
{
c = mSurfaceHolder.lockCanvas();

synchronized (mSurfaceHolder)
{
long start = System.currentTimeMillis();
doDraw(c);
long diff = System.currentTimeMillis() - start;

if (diff < frameRate)
Thread.sleep(frameRate - diff);
}
} catch (InterruptedException e)
{
}
finally
{
if (c != null)
{
mSurfaceHolder.unlockCanvasAndPost(c);
}
}
}
}
}

public void surfaceCreated(SurfaceHolder holder)
{
if (gThread.getState() == Thread.State.TERMINATED)
{
gThread = new GameThread(getHolder(), getContext(), getHandler());
gThread.start();
}
else
{
gThread.start();
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/118 ... -available
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»