在 JADE 中创建代理
Create an agent in 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());
}
}
我创建代理的步骤:
/Applications/jade/src/examples/hello $ javac *.java
/Applications/jade/src/examples/hello $ java jade.Boot -gui -agents fred:examples.hello.HelloWorldAgent
我的class路径
/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 文件夹中创建一个新的 class 时,我在 GUI 中找不到我的代理。
我错过了什么?
您没有正确设置 class路径。如 the accepted answer to 'What is a classpath and how do I set it?' 中所述,您的 class 路径可以包含两种条目类型:
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/
不在 class 路径中。这意味着您的自定义玉 class 不是 visible/accessable.
要解决您的问题,您必须在 class 路径中添加要使用的其他路径。通常您使用目录 .
表示您想要 class 路径中的“当前目录”。
请记住,您的 class 路径中有 JAR 文件 jadeExamples.jar
。当您有一个 .class
文件用于更改 HelloWorldAgent
class 时,可能不清楚 JVM 正在加载哪个 class,是来自 JAR 文件还是 .class
文件系统中的文件。不要在 class 路径中为相同的包提供相同的 class 两次,甚至不要使用新的更改后的 JAR 文件更改 jadeExamples.jar
文件(这可能会更加混乱)。相反,在您的 package/namespace/directory 中创建一个新代理并加载它 -agents foobar:your.package.and.ClassName
,但确保 class 路径设置正确。
我在使用 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());
}
}
我创建代理的步骤:
/Applications/jade/src/examples/hello $ javac *.java
/Applications/jade/src/examples/hello $ java jade.Boot -gui -agents fred:examples.hello.HelloWorldAgent
我的class路径
/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 文件夹中创建一个新的 class 时,我在 GUI 中找不到我的代理。
我错过了什么?
您没有正确设置 class路径。如 the accepted answer to 'What is a classpath and how do I set it?' 中所述,您的 class 路径可以包含两种条目类型:
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/
不在 class 路径中。这意味着您的自定义玉 class 不是 visible/accessable.
要解决您的问题,您必须在 class 路径中添加要使用的其他路径。通常您使用目录 .
表示您想要 class 路径中的“当前目录”。
请记住,您的 class 路径中有 JAR 文件 jadeExamples.jar
。当您有一个 .class
文件用于更改 HelloWorldAgent
class 时,可能不清楚 JVM 正在加载哪个 class,是来自 JAR 文件还是 .class
文件系统中的文件。不要在 class 路径中为相同的包提供相同的 class 两次,甚至不要使用新的更改后的 JAR 文件更改 jadeExamples.jar
文件(这可能会更加混乱)。相反,在您的 package/namespace/directory 中创建一个新代理并加载它 -agents foobar:your.package.and.ClassName
,但确保 class 路径设置正确。