2011-11-12 12 views
0

私は、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%確認、は必ず作りましたまた別のスレッドでアクセスしようとしましたが)、この例外は引き続き発生します。

私を啓発してください...

答えて

1

HAAAAAAAAAAAAAAAAAAa .........

ダーンこのLGの携帯電話は!!!!

私は、携帯電話にハードリブートを与え、電池を取り出して、それを上に開始し、それが再び動作する...

は、Bluetoothをオフにし、上のトリックをしませんでした!私は過去1日ほどそれをしてきました。

神は何のためにそれを廃棄物の約24時間をいまいましい....台無しにどのように

これらの製品は、することができます!

少なくとも今は動作します!

+0

Hey!私もLGの携帯電話で同様の問題を抱えています、どのモデルでこの問題がありましたか? – YasuDevil

+0

デバイスは次のとおりです。LG-P925 – TacB0sS

+0

このソリューションでも問題は解決しましたか? – TacB0sS

関連する問題