Запись данных в выходные потоки Bluetooth для Android: IllegalMonitorStateException - PullRequest
0 голосов
/ 12 ноября 2011

У меня есть Android-приложение Bluetooth, которое управляет несколькими удаленными устройствами ( Capsules ).

Запись данных в поток вывода сокета капсулы работал вчераи после среднего рефакторинга в приложение Android только я получаю следующую ошибку:

java.lang.IllegalMonitorStateException: попытка разблокировать блокировку чтения, не заблокированную текущим потоком.

Вот код создания сокета:

 public final void connectWithCapsule(Capsule capsule)
        throws Exception {
    BluetoothSocket socket = capsulesSockets.get(capsule);

    if (socket == null) {
        try {
            // Method m = capsule.getBT_Device().getClass().getMethod("createRfcommSocket", new Class[]{int.class});
            // socket = (BluetoothSocket) m.invoke(capsule.getBT_Device(), Integer.valueOf(17));
            socket = capsule.getBT_Device().createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
        } catch (Exception e) {
            logError("Error creating RFcomm socket", e);
            throw e;
        }
        capsulesSockets.put(capsule, socket);
    }

    try {
        socket.connect();
    } catch (IOException e) {
        logError("Error connecting socket", e);
        try {
            socket.close();
        } catch (IOException e1) {
            logError("Error closing socket", e1);
        }
        capsulesSockets.remove(capsule);
        throw e;
    }
}

и модель, которая управляет входящими / исходящими потоками:

public final class KitBT_ConnectionModel {

private final OutputStream[] outputStreams;

private final InputStream[] inputStreams;

public KitBT_ConnectionModel(OutputStream[] outputStreams, InputStream[] inputStreams) {
    super();
    this.outputStreams = outputStreams;
    this.inputStreams = inputStreams;
}

public void transmitData(byte[] bs)
        throws IOException {
    for (OutputStream outputStream : outputStreams) {
        outputStream.write(bs); // THIS LINE THROWS THE EXCEPTION
        outputStream.flush();
    }
}

public InputStream[] getInputStreams() {
    return inputStreams;
}
}

Примечание: Я не выполняю никаких действий с обоими потоками, и первая запись вызывает исключение.

Первое, что приходит на ум, - какой поток ставит блокировку чтения икогда?

Я пытался поиграться с потоками, которые вызывают создание сокета, и с транзакциями потоков, которые я сделал уверен , 100% уверен они имеютк обоим обращался один и тот же поток (а также пытался получить доступ с разных потоков), но это исключение сохраняется.

Пожалуйста, просветите меня ...

1 Ответ

1 голос
/ 13 ноября 2011

ХААААААААААААААААААа .........

Черт возьми это телефоны LG !!!!

Я произвел полную перезагрузку телефона, вынул аккумулятор и запустил его снова, и он снова работает ...

выключение и включение Bluetooth не помогло! Я делал это в течение последнего дня или около того.

Черт возьми, это почти 24 часа траты впустую ...

Как могут быть испорчены эти продукты!

по крайней мере, теперь это работает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...