Джейд не может найти агента

Я новичок в 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

В моем случае это был дополнительный пробел после имени агента:

-gui nameAgent: packageName.className

После удаления пробела и добавления проекта в classpath все работало правильно.

-gui nameAgent:packageName.className

Я столкнулся с другой проблемой, поэтому подумал, что напишу решение для нее здесь, чтобы она могла кому-то помочь. При написании пути к классу с помощью "-cp" или "-classpath" пишите путь только до имени выходной папки и не включайте папки, созданные для пространств имен. Например, если ваш класс агента находится в пространстве имен "sample.namespace", команда javac создаст структуру каталогов, например "bin\sample\namespace", и поместит туда файлы. В этом случае не включайте "sample\namespace" в путь к классу. Просто путь до папки "bin", имя выходной папки (bin) может быть другим.

Другие вопросы по тегам