2011-08-11 7 views
9

मैं जावा प्रोग्राम में एम्बेडेड जेएडी चलाता हूं, यानी java jade.Boot ... के साथ नहीं। अब मैं जेएडीई सिस्टम को रोकना चाहता था, लेकिन मुझे ऐसा करने का कोई अच्छा तरीका नहीं मिला है। मैं System.exit() का उपयोग कर पूरे प्रोग्राम से बाहर निकल सकता हूं, लेकिन यह वह नहीं है जो मैं करना चाहता हूं।एक जेएडीई सिस्टम (जावा एजेंट) को रोकें

मैं कई अलग अलग बातें करने की कोशिश की, और मैं अपने एजेंट व्यवहार, रोक सफल लेकिन धागे की एक जोड़ी उनका प्रदर्शन जारी रहेगा: एम्स, डीएफ, एक वेब सर्वर, जेड टाइमर डिस्पैचर, कई उद्धारकर्ता धागे, आदि

यह कैसे मेरे वर्तमान बंद विधि की तरह लग रहा है:

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

कारण मुझे लगता है कि क्या करना चाहते है मैं अपने एजेंट प्रणाली के लिए कुछ JUnit परीक्षण किया है।

कोई विचार यह कैसे पूरा करने के लिए?

उत्तर

6

आप इस तरह के रास्ते में मंच को रोकने के लिए एम्स के अनुरोध कर सकते हैं:

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') है। उन लोगों के साथ समस्या यह है कि मैं उन धागे को मार नहीं सकता जो वे चल रहे हैं, क्योंकि वे इंटरप्टेड अपवादों को अनदेखा करते हैं ... –