Я пытаюсь реализовать функциональный класс Bluetooth для Blackberry.Но я застрял в подключении устройства ..
Я сделал простой MainScreen , который подключается, отключается (пока).Функциональность Bluetooth реализована в другом классе, который внедряет BluetoothSerialPortListener .
Когда я выбираю опцию «connect», он запускает следующий код:
connect(BluetoothSerialPortInfo info){
port = new BluetoothSerialPort(info, BluetoothSerialPort.BAUD_57600,....,this);
Когда протокол соединения завершается, Blackberry выполняет функцию deviceConnected(boolean success)
с boolean
имеет результат соединения (true, если он подключен, и false, если нет).Я хотел проверить это логическое значение перед возвратом из метода connect(BluetoothSerialPortInfo info)
, поэтому я поместил в него wait(1000)
и notify()
в deviceConnected(boolean success)
.
Проблема заключается в том, что обе функции или методы выполняются одним и тем же потоком, и когда создается wait(1000)
, время ожидания заканчивается, а затем deviceConnected функция выполнена ...
Я попытался запустить метод connect в отдельном потоке, и он сработал, но затем я не смог получить доступ к MainScreen объекты, чтобы уведомить об успехе или нет соединения (и даже если бы я мог, я бы предпочел не делать этого).
Мне бы очень хотелось узнать, как запускать методы Listener в отдельном потоке, чтобы они могли выполняться, даже если основной поток занят.
Заранее спасибо.
(Надеюсь, я объяснил себе ...)
РЕДАКТИРОВАТЬ Дополнительные пояснения, если я не объяснил это хорошо:
Дело в том, что я делаю connect(info)
, и если я попытаюсь сделать, например, Thread.sleep (10000), поток будет спать 10 секунд, и после этого вызывается метод deviceConnected, и тогда я могу увидеть ответ.Что бы я ни пытался сделать в методе, который запускает connect(info)
, просто отложите выполнение deviceConnected
.Вот почему я запускаю методы Listener (deviceConnected
в качестве примера) в другом потоке, чтобы он мог выполняться, пока я жду ответа в методе connect(info)
....
РЕДАКТИРОВАТЬ: КОД:
Метод подключения:
public int BT_ConnectDevice(BluetoothSerialPortInfo info)
{
if (info==null) return(0x4F);
try
{
_port = new BluetoothSerialPort(info, BluetoothSerialPort.BAUD_57600, BluetoothSerialPort.DATA_FORMAT_PARITY_NONE | BluetoothSerialPort.DATA_FORMAT_STOP_BITS_1 | BluetoothSerialPort.DATA_FORMAT_DATA_BITS_8, BluetoothSerialPort.FLOW_CONTROL_NONE, 1024, 1024, this);
return(0);
}
catch(Exception e)
{
return(0x3F);
}
}
Метод, выполняемый слушателем:
public void deviceConnected(boolean success)
{
this._bDeviceIsConnected=success;
}
Я пытался добавить в connect метод что-то вроде:
synchronized(lock){
try{
lock.wait(10000);
}
catch(Exception e){}
if (_bDeviceIsConnected) return (0);
}
return(0x3F);
И, конечно, добавьте lock.notify()
в deviceConnected.Но пока я жду, deviceConnected выполняется после возврата из BT_ConnectDevice.