java.lang.IllegalThreadStateExceptionの問題解決

今日のプロジェクトを行うと、私は、デバイスの状態を確認するために継続的なスレッドの使用は、例外java.lang.IllegalThreadStateException、次のコードを報告しました

プライベートスレッドintercomMonitorThread =新しいスレッド(新しいRunnableを(){
ます。public void実行(){
ブール=真hasintercommeeting。
一方、(hasintercommeeting){
IF(intercomList.size()== 0){
ブレーク;
}
以下のために(INT I 0 =; I <intercomList.size(); I ++){
会議をIntercomMeeting = intercomList.get(I);
PbxAbstractDeviceデバイス= pbx.findNumber(meeting.getHandlenum())。
PbxAbstractDevice RemoteDeviceの= pbx.findNumber(meeting.getUserno())。
一覧<PbxChannel> connlist = device.getClonedConnList();
一覧<PbxChannel> remoteconnlist = remotedevice.getClonedConnList();
IF((ヌル== connlist || connlist.size()== 0)&&(ヌル== remoteconnlist || remoteconnlist.size()== 0)){
継続する;
}

((NULL!= connlist && connlist.size()> 0)&&(NULL!= remoteconnlist && remoteconnlist.size()> 0))であれば{
継続する;
}
もし(ヌル!= remoteconnlist && remoteconnlist.size()> 0){
pbx.hangup(remoteconnlist.get(0).getConnId())。
intercomList.remove(ミーティング)。
IF(intercomList.size()== 0){
hasintercommeeting = falseは、
}
}そうしないと {
pbx.hangup(connlist.get(0).getConnId())。
intercomList.remove(ミーティング)。
IF(intercomList.size()== 0){
hasintercommeeting = falseは、
}
}
}

{試します
     Thread.sleep(500)。
}キャッチ(InterruptedExceptionあるx)から{
Thread.currentThread()割り込み(); 
}
    }
}
});


市内通話

(もし!intercomMonitorThread.isAlive()){
intercomMonitorThread.start();
}



変更をしようとした後、例外が再び発生しませんでした

プライベートスレッドintercomMonitorThread。
    実行可能intercommonitorは=新しい実行可能(){
ます。public void実行(){
ブール=真hasintercommeeting。
一方、(hasintercommeeting){
IF(intercomList.size()== 0){
ブレーク;
}
以下のために(INT I 0 =; I <intercomList.size(); I ++){
IntercomMeeting meeting = intercomList.get(i);
PbxAbstractDevice device = pbx.findNumber(meeting.getHandlenum());
PbxAbstractDevice remotedevice = pbx.findNumber(meeting.getUserno());
List<PbxChannel> connlist = device.getClonedConnList();
List<PbxChannel> remoteconnlist = remotedevice.getClonedConnList();
if ((null == connlist || connlist.size() == 0) && (null == remoteconnlist || remoteconnlist.size() == 0)) {
continue;
}

if ((null != connlist && connlist.size() > 0) && (null != remoteconnlist && remoteconnlist.size() > 0)) {
continue;
}
if (null != remoteconnlist && remoteconnlist.size() > 0) {
pbx.hangup(remoteconnlist.get(0).getConnId());
intercomList.remove(meeting);
if (intercomList.size() == 0) {
hasintercommeeting = false;
}
}else {
pbx.hangup(connlist.get(0).getConnId());
intercomList.remove(meeting);
if (intercomList.size() == 0) {
hasintercommeeting = false;
}
}
}

try {
     Thread.sleep(500);
} catch (InterruptedException x) {
Thread.currentThread().interrupt(); 
intercomMonitorThread = null;
}
    }
Thread.currentThread().interrupt(); 
intercomMonitorThread = null;
}
};


调用的地方

if (null == intercomMonitorThread) {
intercomMonitorThread = new Thread(intercommonitor);
intercomMonitorThread.start();
}

发布了34 篇原创文章 · 获赞 2 · 访问量 4万+

おすすめ

転載: blog.csdn.net/zjj2006/article/details/37566527