Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
metrolog
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 101
#1

SurfaceView сворачивание программы - Android

30.04.2013, 01:07. Просмотров 1200. Ответов 12
Метки нет (Все метки)

Java
1
2
3
4
5
6
7
8
9
10
@Override
protected void onDraw(Canvas canvas){  //рисует игровое поле
                super.onDraw(canvas);
                Paint paint = new Paint();
                canvas.drawPaint(paint);
                paint.setStyle(Paint.Style.FILL);
                paint.setColor(Color.WHITE);
                update();
                canvas.drawCircle(XC, YC, radius, paint);
                }
метод отрисовки в SurfaceView
Сворачиваю программу в первый раз - все нормально когда разворачиваю.
При повторном сворачивании выходит ошибка


04-29 22:57:16.959: E/AndroidRuntime(4813): FATAL EXCEPTION: Thread-23150
04-29 22:57:16.959: E/AndroidRuntime(4813): java.lang.NullPointerException
04-29 22:57:16.959: E/AndroidRuntime(4813): at com.example.blindballtest.GameField.onDraw(GameField.java:101)
04-29 22:57:16.959: E/AndroidRuntime(4813): at com.example.blindballtest.ThreadGame.run(ThreadGame.java:42)

Ругается на
canvas.drawPaint(paint);

Подскажите, пожалуйста, в чем дело и как ее исправить?

Добавлено через 2 часа 6 минут
Разобрался в чем дело.
при разворачивании программы у меня сразу запускается поток с отрисовкой и из за того что отрисовка слишком частая ( для достаточной плавности) все переменные не успевают инициализироваться и выходит ошибка
именно не успевает инициализироваться Paint paint = new Paint();

варианты исправить ошибку:
1)уменьшить частоту обновления потока - не подходит для меня.
2)при раскрывании программы не запускать поток, а как бы выводить диалог с предложением продолжить игру. А в это время инициализировать переменные. А при положительном ответе запускать уже отрисовку.

Скажите правильные мысли, или можно все как то по другому сделать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.04.2013, 01:07     SurfaceView сворачивание программы
Посмотрите здесь:

SurfaceView + onKeyDown Android
Простейший пример SurfaceView Android
Android Ошибка в SurfaceView
Android SurfaceView не отображается
Android SurfaceView поверх ImageView
Обработка касаний в SurfaceView Android
Android Мерцание в SurfaceView
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
30.04.2013, 01:13     SurfaceView сворачивание программы #2
Цитата Сообщение от metrolog Посмотреть сообщение
именно не успевает инициализироваться Paint paint = new Paint();
он же у вас в onDraw инициализируется перед использованием.
metrolog
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 101
30.04.2013, 01:15  [ТС]     SurfaceView сворачивание программы #3
у меня onDraw в потоке обновляется
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
30.04.2013, 01:16     SurfaceView сворачивание программы #4
и что?

Добавлено через 29 секунд
может все-таки canvas null?
metrolog
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 101
30.04.2013, 01:17  [ТС]     SurfaceView сворачивание программы #5
Если я уменьшаю частоту обновления потока, то все работает нормально.
если часто обновляется поток, то выходит ошибка.

как это еще обьяснить?
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
30.04.2013, 01:18     SurfaceView сворачивание программы #6
выложите проект.
metrolog
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 101
30.04.2013, 01:20  [ТС]     SurfaceView сворачивание программы #7
вот
Вложения
Тип файла: rar BlindBallTest.rar (988.8 Кб, 12 просмотров)
metrolog
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 101
30.04.2013, 01:20  [ТС]     SurfaceView сворачивание программы #8
canvas вроде тоже не null
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
30.04.2013, 01:36     SurfaceView сворачивание программы #9
именно canvas null

Добавлено через 2 минуты
добавьте проверку канваса на null в ThreadGame.
metrolog
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 101
30.04.2013, 01:36  [ТС]     SurfaceView сворачивание программы #10
Java
1
2
Canvas r  = null;
 r = GameField.getHolder().lockCanvas();
Почему он оказывается null?

как это исправить?
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
30.04.2013, 01:37     SurfaceView сворачивание программы #11
Цитата Сообщение от metrolog Посмотреть сообщение
как это исправить?
просто добавьте проверку на null
metrolog
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 101
30.04.2013, 01:41  [ТС]     SurfaceView сворачивание программы #12
да верно, канвас null
что делать при выполнении условия?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2013, 01:42     SurfaceView сворачивание программы
Еще ссылки по теме:

Android Camera без SurfaceView
Android Вспомогательный поток в SurfaceView
Android Работа с SurfaceView
Canvas, SurfaceView, Touch Android
Восстановление SurfaceView Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
30.04.2013, 01:42     SurfaceView сворачивание программы #13
рисовать только если не null, если null - ничего не делать.
Yandex
Объявления
30.04.2013, 01:42     SurfaceView сворачивание программы
Ответ Создать тему
Опции темы

Текущее время: 00:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru