Джейд не может найти агента
Я новичок в JADE, и у меня возникли проблемы с загрузкой агентов.
Я создал новый проект IntelliJ и добавил "jade.jar" и "commons-codec-1.3.jar" (я использую JADE 4.1.1) в "Dependencies" и поставил галочки для блоков экспорта (я тоже пробовал без них галочка). Затем я добавил "HelloWorldAgent.java", который входит в примеры, в src. Я настроил настройки запуска следующим образом:
- Основной класс: нефрит. Бут
- аргументы программы: -gui testAgent:HelloWorldAgent
- Использовать путь к классу модуля: jadeCW (название моего проекта)
Когда я запускаю с использованием этой конфигурации, парень JADE запускается, но не находит "HelloWorldAgent". Выход:
14-Feb-2012 21:43:08 jade.core.Runtime beginContainer
INFO: ----------------------------------
This is JADE 4.1.1 - revision 6532 of 2011/11/18 16:21:34
downloaded in Open Source, under LGPL restrictions,
at http://jade.tilab.com/
----------------------------------------
Retrieving CommandDispatcher for platform null
14-Feb-2012 21:43:08 jade.imtp.leap.LEAPIMTPManager initialize
INFO: Listening for intra-platform commands on address:
- jicp://192.168.1.66:1099
14-Feb-2012 21:43:08 jade.core.BaseService init
INFO: Service jade.core.management.AgentManagement initialized
14-Feb-2012 21:43:08 jade.core.BaseService init
INFO: Service jade.core.messaging.Messaging initialized
14-Feb-2012 21:43:08 jade.core.BaseService init
INFO: Service jade.core.resource.ResourceManagement initialized
14-Feb-2012 21:43:08 jade.core.BaseService init
INFO: Service jade.core.mobility.AgentMobility initialized
14-Feb-2012 21:43:08 jade.core.BaseService init
INFO: Service jade.core.event.Notification initialized
14-Feb-2012 21:43:08 jade.mtp.http.HTTPServer <init>
INFO: HTTP-MTP Using XML parser com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser
14-Feb-2012 21:43:08 jade.core.messaging.MessagingService boot
INFO: MTP addresses: http://unknown-00-19-c5-7e-cb-4b.home:7778/acc
14-Feb-2012 21:43:08 jade.core.AgentContainerImpl startBootstrapAgents
SEVERE: Cannot create agent testAgent: Class HelloWorldAgent for agent ( agent-identifier :name testAgent@192.168.1.66:1099/JADE ) not found [nested java.lang.ClassNotFoundException: HelloWorldAgent]
14-Feb-2012 21:43:08 jade.core.AgentContainerImpl joinPlatform
INFO: --------------------------------------
Agent container Main-Container@192.168.1.66 is ready.
Ключевой проблемой явно является:
SEVERE: Cannot create agent testAgent: Class HelloWorldAgent for agent ( agent-identifier :name testAgent@192.168.1.66:1099/JADE ) not found [nested java.lang.ClassNotFoundException: HelloWorldAgent]
Я пытался использовать Eclipse, но у меня возникла та же проблема, я также пытался использовать более раннюю версию JADE, но опять же, не повезло. Любая помощь приветствуется.
Большое спасибо
Дэн
4 ответа
Кажется, проблема была в том, что я поместил "jade.jar" и "commons-codec-1.3.jar" (я изначально поместил их в /Library/Java/Extensions (в OSX lion)). Я попытался удалить их, положить их куда-то еще и попробовал еще раз, и теперь это работает. Не совсем уверен, почему ум!
Вам нужно передать полностью определенное имя класса при запуске. На моей старой версии JADE, HelloWorldAgent
находится в examples.hello
пакет. Таким образом, вы должны указать аргументы программы: -gui testAgent:examples.hello.HelloWorldAgent
,
Просто добавьте имя пакета перед именем класса
-gui testAgent:packageName.HelloWorldAgent
В моем случае это был дополнительный пробел после имени агента:
-gui nameAgent: packageName.className
После удаления пробела и добавления проекта в classpath все работало правильно.
-gui nameAgent:packageName.className
Я столкнулся с другой проблемой, поэтому подумал, что напишу решение для нее здесь, чтобы она могла кому-то помочь. При написании пути к классу с помощью "-cp" или "-classpath" пишите путь только до имени выходной папки и не включайте папки, созданные для пространств имен. Например, если ваш класс агента находится в пространстве имен "sample.namespace", команда javac создаст структуру каталогов, например "bin\sample\namespace", и поместит туда файлы. В этом случае не включайте "sample\namespace" в путь к классу. Просто путь до папки "bin", имя выходной папки (bin) может быть другим.