С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

30.04.2013, 01:07. Просмотров 1256. Ответов 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)при раскрывании программы не запускать поток, а как бы выводить диалог с предложением продолжить игру. А в это время инициализировать переменные. А при положительном ответе запускать уже отрисовку.

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

Восстановление SurfaceView - Программирование Android
Кто работал с SurfaceView, помогите! Рисую на SurfaceView с помощью onTouchEvent(), без потока, все замечательно рисует, сворачиваю...

SurfaceView + onKeyDown - Программирование Android
Проблемка очень простая - не реагирует на onKeyDown в классе, наследующем SurfaceView. Исправьте мою криворукость, пожалуйста, подскажите,...

Мерцание в SurfaceView - Программирование Android
Всем привет! Рисую на SurfaceView фон и на нем анимированные объекты. Кадры беру из атласа. Появилось мерцание, причем фон не мерцает а...

Работа с SurfaceView - Программирование Android
Отрисовка в SurfaceView никогда не вызывала трудностей, до тех пор, пока не запустил приложение на телефоне с экраном 1920х1080px. Фпс упал...

SurfaceView не отображается - Программирование Android
Учусь программировать по книге П. Дейтел, Х. Дейтел "Android для программистов. Создаём приложения". Делаю уже 5 приложение, но это не...

Ошибка в SurfaceView - Программирование Android
есть игра. отрисовка идет через SurfaceView и поток привязанный к нему. ошибка возникает в следующем моменте - я открываю сам игровой...

12
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
30.04.2013, 01:13 #2
Цитата Сообщение от metrolog Посмотреть сообщение
именно не успевает инициализироваться Paint paint = new Paint();
он же у вас в onDraw инициализируется перед использованием.
0
metrolog
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 101
30.04.2013, 01:15  [ТС] #3
у меня onDraw в потоке обновляется
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
30.04.2013, 01:16 #4
и что?

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

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

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

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

SurfaceView - широкий рисунок - Программирование Android
Проблема в ограничениях размеров. Создаю класс: public class D3D extends SurfaceView { public D3D(Context...

Camera без SurfaceView - Программирование Android
Здравствуйте. Можно ли сделать снимок с помощью класса Camera без предварительного просмотра? Например Camera.open() и потом сразу...

Узнать фон SurfaceView - Программирование Android
Как узнать фон SurfaceView? mSurfaceViewLeft = (SurfaceView)findViewById(R.id.surfaceViewLeft); mSurfaceViewRight =...

Canvas, SurfaceView, Touch - Программирование Android
Всем добра. Возник один баг (может в коде проблема), который неприятно выглядит в приложении. Рисуя с помощью SurfaceView, Canvas...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.