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

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

Войти
Регистрация
Восстановить пароль
 
metrolog
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 101
#1

Ошибка в SurfaceView - Android

13.04.2013, 23:16. Просмотров 933. Ответов 4
Метки нет (Все метки)

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

логи прикрепил.

это код конструктора класса отрисовки
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
public Game(Context context, AttributeSet attributeSet) {
        super(context, attributeSet);
            play = false;
        potok = new  Thread1(this);
            holder = getHolder();
            setFocusable(true);
            holder.addCallback(new SurfaceHolder.Callback()
            {
              public void surfaceDestroyed(SurfaceHolder holder)
                  {
                 Log.d(LOG_TAG, "удаление");
                      boolean retry = true;
                      potok.setRunning(false);
                      pos.clear();
                     
                       while (retry) {
                               try {
                                   potok.join();
                                     retry = false;
                               } catch (InterruptedException e) {
                               }
                        }
                  }
@Override
                  public void surfaceCreated(SurfaceHolder holder) 
                  {
    loadbitmap();
     Log.d(LOG_TAG, "создание");
        potok.setRunning(true);
        potok.start();
                  }
@Override
                  public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) 
                  {
    Log.d(LOG_TAG, "изменение");
                  }
           }
        );
        
}
это код потока
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
public class Thread1 extends Thread {
    private boolean running = true;
    int speed = 100;
    long timer;
    private Game game;
    
    public Thread1(Game game) 
    {
          this.game = game;
    }
 
    public void setRunning(boolean run) 
    {
          running = run;
    }
 
    long prevTime = System.currentTimeMillis();
    public void run() {
          while (running) {
             Canvas r  = null;
              long now = System.currentTimeMillis();
              long elapsedTime = now - prevTime;
              if (elapsedTime > speed){
                prevTime = now;
                timer = timer + elapsedTime;
 
                
                 try {
                        r = game.getHolder().lockCanvas();
                        synchronized (game.getHolder()) {
                               game.onDraw(r);
                               if (Game.play == true){
                                   game.onDraw1(r);
                               }
                         
                        }
                    
                 } finally {
                        if (r != null) {
                               game.getHolder().unlockCanvasAndPost(r);
                        }
                 }
          }
 
          }
          
}  
}
при повторном открывание доходит до тэга с созданием.
ошибка как я понял где то здесь
Java
1
2
3
4
5
6
7
 public void surfaceCreated(SurfaceHolder holder) 
                  {
    loadbitmap();
     Log.d(LOG_TAG, "создание");
        potok.setRunning(true);
        potok.start();
                  }
Вложения
Тип файла: txt log.txt (2.2 Кб, 5 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.04.2013, 23:16     Ошибка в SurfaceView
Посмотрите здесь:

SurfaceView + onKeyDown Android
Простейший пример SurfaceView Android
Android SurfaceView не отображается
Android SurfaceView поверх ImageView
SurfaceView - широкий рисунок Android
Обработка касаний в SurfaceView Android
Android Мерцание в SurfaceView
Android Camera без SurfaceView
Android Вспомогательный поток в SurfaceView
Android Работа с SurfaceView
Canvas, SurfaceView, Touch Android
Восстановление SurfaceView Android

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
13.04.2013, 23:24     Ошибка в SurfaceView #2
вы пытаетесь запустить уже запущенный поток.
metrolog
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 101
13.04.2013, 23:25  [ТС]     Ошибка в SurfaceView #3
где мне его тогда запускать если не в surfaceCreated ?
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
13.04.2013, 23:30     Ошибка в SurfaceView #4
Java
1
2
3
4
5
6
7
8
public void surfaceCreated(SurfaceHolder holder) 
                  {
    loadbitmap();
     Log.d(LOG_TAG, "создание");
        potok = new  Thread1(Game.this);
        potok.setRunning(true);
        potok.start();
                  }
попробуйте так.
metrolog
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 101
13.04.2013, 23:38  [ТС]     Ошибка в SurfaceView #5
уже лучше стало)
при первом скрывание ошибки не выдает, но если сразу второй раз скрыть раскрыть то выдает

04-13 23:34:17.120: E/AndroidRuntime(5453): FATAL EXCEPTION: Thread-28170
04-13 23:34:17.120: E/AndroidRuntime(5453): java.lang.NullPointerException
04-13 23:34:17.120: E/AndroidRuntime(5453): at com.example.games.Game.onDraw(Game.java:140)
04-13 23:34:17.120: E/AndroidRuntime(5453): at com.example.games.Thread1.run(Thread1.java:40)

Добавлено через 3 минуты
все. решил проблему.
большое спасибо.
Yandex
Объявления
13.04.2013, 23:38     Ошибка в SurfaceView
Ответ Создать тему
Опции темы

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