2011-08-11 16 views
9

JADE'yi bir Java programında gömülü olarak çalıştırıyorum, yani java jade.Boot ... ile değil. Şimdi JADE sistemini durdurmak istedim, ama bunun için iyi bir yol bulamadım. Tüm programdan System.exit() kullanarak çıkıyorum, ama yapmak istediğim bu değil. JADE sistemini durdurun (Java aracıları)

Birkaç farklı şeyler denedim ve benim ajan davranışları durdurma başarılı oldu ama Threadlar birkaç çalışmaya devam: vb AMS, DF, bir web sunucusu, JADE Zamanlayıcı memuru, birkaç Kurtarıcı ipler,

Bu benim şimdiki kapatma yöntemi gibi görünüyor: benim ajan sistemi için bazı JUnit testler var olduğunu

@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(); 
    } 
    } 

bunu yapmak istiyorum nedenidir.

Bunu nasıl gerçekleştireceğiniz konusunda herhangi bir fikrin var mı?

cevap

6

Böyle yolla platformu durdurmak için AMS isteyebilirsiniz:

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

ben hala çalışıyor Kurtarıcı Atatürk'ün çeşitli örneklerini ('jade.core.messaging.MessageManager $ Deliverer') var. Sorun şu ki, üzerinde çalıştıkları konuları öldüremem, çünkü InterruptedExceptions'ı görmezden geliyorlar ... –