Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
AlexRu18
5 / 5 / 3
Регистрация: 29.01.2015
Сообщений: 189
1

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

15.02.2016, 13:04. Просмотров 431. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2016, 13:04
Ответы с готовыми решениями:

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

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

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

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

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

11
Pablito
2825 / 2244 / 759
Регистрация: 12.05.2014
Сообщений: 7,847
Завершенные тесты: 1
15.02.2016, 13:20 2
наверное стоило показать больше кода что бы было понятно как, где и после чего инициализируется bluetoothServerSocket
0
AlexRu18
5 / 5 / 3
Регистрация: 29.01.2015
Сообщений: 189
15.02.2016, 20:24  [ТС] 3
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
149 / 136 / 35
Регистрация: 29.07.2012
Сообщений: 709
15.02.2016, 23:56 4
Не ужели так трудно пробежаться отладчиком по коду, при этом смотря в окно переменных. После первого прохода все сразу станет ясно. Практика со sleep плохая. Попробуйте посмотреть если ли какая нибудь функция которая возвращает состояние блютуса, если есть то по этой переменный и ориентируйтесь.
0
AlexRu18
5 / 5 / 3
Регистрация: 29.01.2015
Сообщений: 189
16.02.2016, 00:08  [ТС] 5
Я начинающий в этом деле, не могли бы вы уточнить где я могу увидеть отладчик и окно переменных? Такой функции нет
0
Pablito
2825 / 2244 / 759
Регистрация: 12.05.2014
Сообщений: 7,847
Завершенные тесты: 1
16.02.2016, 11:50 6
Java
1
final BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
после этой строчки вывести в лог и посмотреть чему равна переменная bluetoothAdapter
0
AlexRu18
5 / 5 / 3
Регистрация: 29.01.2015
Сообщений: 189
16.02.2016, 18:28  [ТС] 7
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
Pablito
2825 / 2244 / 759
Регистрация: 12.05.2014
Сообщений: 7,847
Завершенные тесты: 1
16.02.2016, 19:00 8
ну тогда наверное надо проверять включен блютуз или нет ДО того как запускается ServerThread
0
AlexRu18
5 / 5 / 3
Регистрация: 29.01.2015
Сообщений: 189
16.02.2016, 19:17  [ТС] 9
Именно. В самом самом начале кода, в onStart() я запускаю mBluetoothAdapter.enable() и всё должно быть пучком, не так-ли?
0
xaat
43 / 16 / 6
Регистрация: 05.12.2015
Сообщений: 65
16.02.2016, 19:21 10
Разрешения в манифесте прописаны?
0
AlexRu18
5 / 5 / 3
Регистрация: 29.01.2015
Сообщений: 189
16.02.2016, 19:37  [ТС] 11
Конечно.

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
0
Pablito
2825 / 2244 / 759
Регистрация: 12.05.2014
Сообщений: 7,847
Завершенные тесты: 1
16.02.2016, 19:38 12
лично я бы создал 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
16.02.2016, 19:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2016, 19:38

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

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

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


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

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

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