Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
 Аватар для AlexRu18
5 / 5 / 3
Регистрация: 29.01.2015
Сообщений: 189

Вылетает при создании потока

15.02.2016, 13:04. Показов 1904. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
При выключенном Bluetooth, запуская приложение у меня включается блютуз, но выдаёт ошибку создания потока:
XML
1
2
3
02-15 13:31:26.111 30855-31205/com.alexru18.bluetoothchat E/AndroidRuntime: FATAL EXCEPTION: Thread-2439
                                                                            java.lang.NullPointerException
                                                                                at com.alexru18.bluetoothchat.ServerThread.run(ServerThread.java:36)
Думал дело в том, что блютуз запускается не сразу, а через несколько мгновений и поставил delay, но не помогло:
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
public void run() {
 
        BluetoothSocket socket = null;
 
        Log.d("ServerThread", "Started");
 
        while (true) {
            try {
                socket = bluetoothServerSocket.accept();  //(ServerThread.java:36)
            } catch (IOException e) {
                Log.d("ServerThread", "Stop: " + e.getLocalizedMessage());
                break;
            }
            try {
                sleep(5000);
                if (socket != null) {
                    communicatorService.createCommunicatorThread(socket).startCommunication();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
 
        }
    }
В чём может быть проблема?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.02.2016, 13:04
Ответы с готовыми решениями:

Вылетает приложение при создании нового окна
Здравствуйте! Прежде чем опишу проблему, выдам своих исходники по уроку. Работаю в android studio 3.1.3 XML activity_main ...

Вылетает при создании подключения
Всем привет. Пишу прогу уже примерно месяц, использовал источник данных firebird, все было в поряде. Все нормально работало, написание...

При завершении потока программа вылетает
вроде все работает но почему завершается AccesViolation вкурить немогу( unit reg; interface uses Windows, Messages,...

11
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
15.02.2016, 13:20
наверное стоило показать больше кода что бы было понятно как, где и после чего инициализируется bluetoothServerSocket
0
 Аватар для AlexRu18
5 / 5 / 3
Регистрация: 29.01.2015
Сообщений: 189
15.02.2016, 20:24  [ТС]
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
49
50
51
52
53
54
55
56
57
58
import java.io.IOException;
import java.util.UUID;
 
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothServerSocket;
import android.bluetooth.BluetoothSocket;
import android.util.Log;
 
public class ServerThread extends Thread {
 
    private final BluetoothServerSocket bluetoothServerSocket;
    private final CommunicatorService communicatorService;
 
    public ServerThread(CommunicatorService communicatorService) {
        this.communicatorService = communicatorService;
        final BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        BluetoothServerSocket tmp = null;
        try {
            tmp = bluetoothAdapter.listenUsingRfcommWithServiceRecord("BluetoothApp", UUID.fromString(MainActivity.UUID));
        } catch (IOException e) {
            Log.d("ServerThread", e.getLocalizedMessage());
        }
        bluetoothServerSocket = tmp;
    }
 
    public void run() {
 
        BluetoothSocket socket = null;
 
        Log.d("ServerThread", "Started");
 
        while (true) {
            try {
                socket = bluetoothServerSocket.accept();
            } catch (IOException e) {
                Log.d("ServerThread", "Stop: " + e.getLocalizedMessage());
                break;
            }
            try {
                sleep(5000);
                if (socket != null) {
                    communicatorService.createCommunicatorThread(socket).startCommunication();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
 
        }
    }
 
    public void cancel() {
        try {
            bluetoothServerSocket.close();
        } catch (IOException e) {
            Log.d("ServerThread", e.getLocalizedMessage());
        }
    }
}
0
 Аватар для Bend3r
150 / 137 / 35
Регистрация: 29.07.2012
Сообщений: 709
15.02.2016, 23:56
Не ужели так трудно пробежаться отладчиком по коду, при этом смотря в окно переменных. После первого прохода все сразу станет ясно. Практика со sleep плохая. Попробуйте посмотреть если ли какая нибудь функция которая возвращает состояние блютуса, если есть то по этой переменный и ориентируйтесь.
0
 Аватар для AlexRu18
5 / 5 / 3
Регистрация: 29.01.2015
Сообщений: 189
16.02.2016, 00:08  [ТС]
Я начинающий в этом деле, не могли бы вы уточнить где я могу увидеть отладчик и окно переменных? Такой функции нет
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
16.02.2016, 11:50
Java
1
final BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
после этой строчки вывести в лог и посмотреть чему равна переменная bluetoothAdapter
0
 Аватар для AlexRu18
5 / 5 / 3
Регистрация: 29.01.2015
Сообщений: 189
16.02.2016, 18:28  [ТС]
XML
1
2
3
4
5
6
7
8
9
10
11
02-16 19:28:05.571 11170-11170/com.alexru18.bluetoothchat E/Trace: error opening trace file: No such file or directory (2)
02-16 19:28:05.571 11170-11170/com.alexru18.bluetoothchat D/ActivityThread: setTargetHeapUtilization:0.25
02-16 19:28:05.571 11170-11170/com.alexru18.bluetoothchat D/ActivityThread: setTargetHeapIdealFree:8388608
02-16 19:28:05.571 11170-11170/com.alexru18.bluetoothchat D/ActivityThread: setTargetHeapConcurrentStart:2097152
02-16 19:28:05.971 11170-11170/com.alexru18.bluetoothchat D/ServerThread: bluetoothAdapter =android.bluetooth.BluetoothAdapter@41569c30
02-16 19:28:05.981 11170-11170/com.alexru18.bluetoothchat D/ServerThread: Not able to register SDP record for BluetoothApp
02-16 19:28:05.981 11170-11197/com.alexru18.bluetoothchat D/ServerThread: Started
02-16 19:28:05.981 11170-11197/com.alexru18.bluetoothchat W/dalvikvm: threadid=11: thread exiting with uncaught exception (group=0x41141300)
02-16 19:28:05.981 11170-11197/com.alexru18.bluetoothchat E/AndroidRuntime: FATAL EXCEPTION: Thread-4581
                                                                            java.lang.NullPointerException
                                                                                at com.alexru18.bluetoothchat.ServerThread.run(ServerThread.java:38)
И дальше креш. И ещё забыл дописать что когда перед включением приложения блютуз активен, то всё проходит нормально
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
16.02.2016, 19:00
ну тогда наверное надо проверять включен блютуз или нет ДО того как запускается ServerThread
0
 Аватар для AlexRu18
5 / 5 / 3
Регистрация: 29.01.2015
Сообщений: 189
16.02.2016, 19:17  [ТС]
Именно. В самом самом начале кода, в onStart() я запускаю mBluetoothAdapter.enable() и всё должно быть пучком, не так-ли?
0
43 / 16 / 6
Регистрация: 05.12.2015
Сообщений: 65
16.02.2016, 19:21
Разрешения в манифесте прописаны?
0
 Аватар для AlexRu18
5 / 5 / 3
Регистрация: 29.01.2015
Сообщений: 189
16.02.2016, 19:37  [ТС]
Конечно.

<uses-permission android:name="android.permission.BLUETOO TH" />
<uses-permission android:name="android.permission.BLUETOO TH_ADMIN" />
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
16.02.2016, 19:38
лично я бы создал BroadcastReceiver который реагировал бы на вкл/выкл блютуза, а уже из того ресивера либо интентами через активити либо еще как-то включал-останавливал поток который слушает сокет
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    private final BroadcastReceiver btWatcher = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
                int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR);
                switch (state) {
                    case BluetoothAdapter.STATE_OFF:
                        break;
                    case BluetoothAdapter.STATE_TURNING_OFF:
                        break;
                    case BluetoothAdapter.STATE_ON:
                        break;
                    case BluetoothAdapter.STATE_TURNING_ON:
                        break;
                }
            }
        }
    };
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.02.2016, 19:38
Помогаю со студенческими работами здесь

Ошибка при создании потока
uses System.Threading; procedure Add(); begin for var i := 0 to 9 do Writeln(i); end; begin var T := new...

Ошибка при создании потока
Добрый вечер, собственно задача состоит в том, что бы написать програмку для взаимодействия с приборчиком(капнограф) через виртуальный COM,...

Ошибка при создании потока
An unhandled exception of type 'System.ArgumentException' occurred in WindowsBase.dll Additional information: Необходимо создать...

Ошибка при создании потока
Почему возникает ошибка: 1&gt;c:\users\егор\desktop\fun_to__\fun_to__\fun+\dir\mainfile.h(17) : error C2664: _beginthread: невозможно...

Вылетает Entity Framework при создании модели
Решил воспользоваться благами автоматического создания моделей из готовой бд и поставил Entity Framework в свой проект, но не тут то было....


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru