私は、2つのリモートデバイスを管理するAndroid Bluetoothアプリケーションを持っています(カプセル)。カプセルのソケット出力ストリームにデータを書き込むAndroidのBluetooth出力ストリームスローにデータを書き込む:IllegalMonitorStateException
は昨日働いた、とだけ 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%確認、は必ず作りましたまた別のスレッドでアクセスしようとしましたが)、この例外は引き続き発生します。
私を啓発してください...
Hey!私もLGの携帯電話で同様の問題を抱えています、どのモデルでこの問題がありましたか? – YasuDevil
デバイスは次のとおりです。LG-P925 – TacB0sS
このソリューションでも問題は解決しましたか? – TacB0sS