2011-08-11 16 views
9

Iはjava jade.Boot ...で、すなわち、Javaプログラムに埋め込まれたJADEを実行しません。 今、私はJADEシステムを停止したいと思っていましたが、私はそれを行う良い方法を見つけました。 System.exit()を使用してプログラム全体を終了することはできますが、それは私がやりたいことではありません。停止JADEシステム(Javaエージェント)

私は、いくつかの異なるものを試してみました、と私は私のエージェントの動作を停止成功し、 が、スレッドのカップルは引き続き実行:AMS、DF、ウェブサーバ、JADEタイマーのディスパッチャ、いくつかの救出スレッドなど

私はそれをしたい理由は、私は私の エージェントシステムのためのいくつかのJUnitテストを持っているということです

@Override 
    public void shutdown() { 
    // TODO This does not work yet.. 
    try { 
     for (WeakReference<AgentController> acr : agents) { 
     AgentController ac = acr.get(); // jade.wrapper.AgentController 
     if (ac != null) ac.kill(); 
     } 
     container.kill(); // jade.wrapper.AgentContainer 
     Runtime.instance().shutDown(); // jade.core.Runtime 
    } catch (StaleProxyException e) { 
     e.printStackTrace(); 
    } 
    } 

これが私の現在のシャットダウン方法がどのように見えるかです。

どのようなアイデアを達成するには?

答えて

6

あなたは、このような方法で、プラットフォームを停止するようにAMSを要求することができます。

Codec codec = new SLCodec();  
Ontology jmo = JADEManagementOntology.getInstance(); 
getContentManager().registerLanguage(codec); 
getContentManager().registerOntology(jmo); 
ACLMessage msg = new ACLMessage(ACLMessage.REQUEST); 
msg.addReceiver(getAMS()); 
msg.setLanguage(codec.getName()); 
msg.setOntology(jmo.getName()); 
try { 
    getContentManager().fillContent(msg, new Action(getAID(), new ShutdownPlatform())); 
    send(msg); 
} 
catch (Exception e) {} 
+0

は、私はまだ( 'jade.core.messaging.MessageManager $ Deliverer')を実行している救出の複数のインスタンスを持っています。これらの問題は、InterruptedExceptionsを無視するため、実行中のスレッドを強制終了できないということです。 –

関連する問題