【问题标题】:Create an agent in JADE在 JADE 中创建代理
【发布时间】:2019-09-20 16:27:33
【问题描述】:

我在使用 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 jade.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! My name is fred)。当我在 hello 文件夹中创建一个新类时,我在 GUI 中找不到我的代理。

我错过了什么?

【问题讨论】:

  • 请检查stackoverflow.com/questions/2396493/… 以获取您可以使用的有效类路径设置。您不会将单个 .class 文件添加到类路径,而是将目录路径添加到您正在使用的根包层次结构。在您的情况下,它可能是/Applications/jade/src/
  • @Progman 感谢您的链接,我已经用您所说的修改了我的类路径,但它似乎不起作用
  • edit您的问题包括您拥有的目录的内容(不确定命令find .在您的系统上是否可用),您在目录中的文件,您如何开始您正在使用的应用程序和当前类路径设置。根据您的系统,您可能需要在更改环境变量时重新启动系统或启动新终端。也尝试使用-cp 参数。包括您从 java 获得的完整完整错误消息。
  • edit您的问题包含您正在使用的所有目录的详细、完整列表、您在其中的子目录、每个目录包含的文件、.java 的内容文件,用于将.java 文件编译成.class 文件的语句,执行javac 应用程序的位置,CLASSPATH 的当前内容,关于如何启动jade 应用程序的完整语句和完整的完成您收到的错误消息。
  • 您应该从您的 CLASSPATH 中删除“jadeExamples.jar”文件(如果您不需要它们)和/或将您的代理移动到不同的包中,这样 JVM 就不会混淆要加载的类(看起来它总是使用 JAR 文件中的 HelloWorldAgent 代理)。

标签: java agents-jade


【解决方案1】:

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

因此,类路径包含:

  • JAR 文件,以及
  • 包层次结构顶部的路径。

在您的情况下,您只能参考以下 .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/ 不在类路径中。这意味着您的自定义翡翠类不可见/不可访问。

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

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

【讨论】:

  • 非常感谢您的详细解答!我已将/Applications/jade/src/examples/hello/ 添加到我的类路径中(当然还重新启动了我的计算机),但它也不起作用。
  • @NellyBarret 如果您有一个包examples.hello,那么您不应该将/Applications/jade/src/examples/hello/ 添加到您的类路径中,而是将目录/Applications/jade/src/ 添加到您的包层次结构的“根”。
  • 我已经用/Applications/jade/src 修改了我的类路径,但它也不起作用:(
猜你喜欢
  • 1970-01-01
  • 2016-12-25
  • 2016-04-19
  • 2014-04-18
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多