java - 在 JADE 中创建代理

标签 java agents-jade

我在使用 JADE 创建代理时遇到问题。

我的结构

/
  Applications
    jade
      lib
        jade.jar
        jadeExamples.jar
      src
        examples
          hello
            HelloWorldAgent.class
            HelloWorldAgent.java

我的文件HelloWorldAgent.java

package examples.hello;

import jade.core.Agent;

public class HelloWorldAgent extends Agent {
    protected void setup() {
        System.out.println("Hello! My name is "+getLocalName());
    }
}

创建代理的步骤:

  1. /Applications/jade/src/examples/hello $ javac *.java

  2. /Applications/jade/src/examples/hello $ java jame.Boot -gui -agents fred:examples.hello.HelloWorldAgent

我的类路径

/Library/Java/JavaVirtualMachines/jdk-12.0.2.jdk/Contents/Home:/Applications/jade/lib/jade.jar:/Applications/jade/lib/jadeExamples.jar:/Applications/ Jade /src/

输出

Sep 21, 2019 5:28:05 PM jade.core.Runtime beginContainer
INFO: ----------------------------------
    This is JADE 4.5.0 - revision 6825 of 23-05-2017 10:06:04
    downloaded in Open Source, under LGPL restrictions,
    at http://jade.tilab.com/
----------------------------------------
Sep 21, 2019 5:28:05 PM jade.imtp.leap.LEAPIMTPManager initialize
INFO: Listening for intra-platform commands on address:
- jicp://192.168.1.104:1099

Sep 21, 2019 5:28:06 PM jade.core.BaseService init
INFO: Service jade.core.management.AgentManagement initialized
Sep 21, 2019 5:28:06 PM jade.core.BaseService init
INFO: Service jade.core.messaging.Messaging initialized
Sep 21, 2019 5:28:06 PM jade.core.BaseService init
INFO: Service jade.core.resource.ResourceManagement initialized
Sep 21, 2019 5:28:06 PM jade.core.BaseService init
INFO: Service jade.core.mobility.AgentMobility initialized
Sep 21, 2019 5:28:06 PM jade.core.BaseService init
INFO: Service jade.core.event.Notification initialized
Sep 21, 2019 5:28:11 PM jade.mtp.http.HTTPServer <init>
INFO: HTTP-MTP Using XML parser com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser
Sep 21, 2019 5:28:11 PM jade.core.messaging.MessagingService boot
INFO: MTP addresses:
http://192.168.1.104:7778/acc
Hello World! My name is fred
Sep 21, 2019 5:28:11 PM jade.core.AgentContainerImpl joinPlatform
INFO: --------------------------------------
Agent container Main-Container@192.168.1.104 is ready.
--------------------------------------------

我的问题

如果我更改 HelloWorldAgent 中的消息(例如 System.out.println("Hello ! My name is "+getLocalName());),当我运行我的程序时,它不会更新代理(控制台显示 Hello World!我的名字是 fred)。当我在 hello 文件夹中创建一个新类时,我在 GUI 中找不到我的代理。

我错过了什么?

最佳答案

您没有正确设置类路径。正如 the accepted answer to 'What is a classpath and how do I set it?' 中提到的,您的类路径可以包含两种条目类型:

So, classpaths contain:

  • JAR files, and
  • Paths to the top of package hierarchies.

在您的情况下,您仅引用以下 .jar 文件:

  • /Library/Java/JavaVirtualMachines/jdk-12.0.2.jdk/Contents/Home
  • /Applications/jade/lib/jade.jar
  • /Applications/jade/lib/jadeExamples.jar

请注意,您的工作路径 /Applications/jade/src/examples/hello/ 不在类路径中。这意味着您的自定义 jade 类不可见/不可访问。

要解决您的问题,您必须添加要在类路径中使用的其他路径。通常,您使用目录 . 来指示您希望在类路径中使用“当前目录”。

请记住,您的类路径中有 JAR 文件 jadeExamples.jar。当您拥有已更改的 HelloWorldAgent 类的 .class 文件时,可能不清楚 JVM 正在加载哪个类,是 JAR 文件中的类还是 中的类。文件系统中的 class 文件。不要在类路径中为同一个包提供两次相同的类,甚至不要使用新更改的 JAR 文件更改 jadeExamples.jar 文件(这可能会更加令人困惑)。相反,在您的包/命名空间/目录中创建一个新代理并加载它-agents foobar:your.package.and.ClassName,但确保类路径设置正确。

关于java - 在 JADE 中创建代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58032111/

相关文章:

java - 迁移失败: Aborting migration: Timeout to receive migration response has expired

java - JADE Con​​tractNet 和 GUI 问题

java - 不兼容类型错误,Java

java - 数组中多数元素的位操作解决方案

JAVA比较器抛出错误(多线程执行)

java - 如何使用jade向远程主机上的另一个代理发送消息?

java - JADE - 代理类的实例

java - 当默认值为 true 时,jackson 会忽略它

java - 具有不同功能的多个 DialogFragments

java - GPS 坐标未正确存储在从 android 到 php 的数据库中