groovy 中的 Repast ReLogo 代码编译失败

Compilation fails for Repast ReLogo code in groovy

我在 ReLogo 中编写了一个 Repast 程序。基本上,我按照 this 文档第 19 页的说明复制粘贴代码。

我在 Ubuntu 18.04,我按照说明安装了 Repast Symphony。我的 java 版本基本上是 oracle JDK-8:-

java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

然后我尝试 运行 按照第 20 页上的说明编写代码,但项目无法编译并出现此错误:-

Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problems: 
    The annotation @ReLogoBuilderGeneratedFor is disallowed for this location
    Syntax error, insert ";" to complete FieldDeclaration
    Duplicate field ReLogoObserver.get
    Return type for the method is missing
    The annotation @ReLogoBuilderGeneratedFor is disallowed for this location
    Syntax error, insert ";" to complete FieldDeclaration
    Duplicate field ReLogoObserver.set
    void is an invalid type for the variable set
    Return type for the method is missing
    Syntax error, insert ";" to complete FieldDeclaration
    Duplicate field ReLogoObserver.get
    Return type for the method is missing
    Syntax error, insert ";" to complete FieldDeclaration
    Duplicate field ReLogoObserver.set
    Return type for the method is missing

    at zombies.ReLogoObserver.<init>(ReLogoObserver.java:639)
    at zombies.relogo.UserObserver.<init>(UserObserver.groovy)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at java.lang.Class.newInstance(Class.java:442)
    at repast.simphony.relogo.factories.ObserverFactory.createObserver(ObserverFactory.java:28)
    at org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:237)
    at zombies.context.SimBuilder.build(SimBuilder.groovy:46)
    at repast.simphony.dataLoader.engine.ClassNameContextBuilder.build(ClassNameContextBuilder.java:41)
    at repast.simphony.dataLoader.engine.DataLoaderControllerAction.runInitialize(DataLoaderControllerAction.java:48)
    at repast.simphony.engine.controller.DefaultController.visit(DefaultController.java:214)
    at repast.simphony.engine.controller.DefaultController.visit(DefaultController.java:1)
    at repast.simphony.util.collections.NaryTree.preOrderTraverals(NaryTree.java:292)
    at repast.simphony.util.collections.NaryTree.preOrderTraverals(NaryTree.java:295)
    at repast.simphony.util.collections.NaryTree.preOrderTraverals(NaryTree.java:295)
    at repast.simphony.util.collections.NaryTree.preOrderTraversal(NaryTree.java:288)
    at repast.simphony.engine.controller.DefaultController.runInitialize(DefaultController.java:212)
    at repast.simphony.engine.controller.DefaultController.runInitialize(DefaultController.java:383)
    at repast.simphony.ui.RSApplication.initSim(RSApplication.java:157)
    at repast.simphony.ui.action.InitRun.actionPerformed(InitRun.java:17)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
    at java.awt.Component.processMouseEvent(Component.java:6539)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at java.awt.Component.processEvent(Component.java:6304)
    at java.awt.Container.processEvent(Container.java:2239)
    at java.awt.Component.dispatchEventImpl(Component.java:4889)
    at java.awt.Container.dispatchEventImpl(Container.java:2297)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
    at java.awt.Container.dispatchEventImpl(Container.java:2283)
    at java.awt.Window.dispatchEventImpl(Window.java:2746)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
    at java.awt.EventQueue.access0(EventQueue.java:97)
    at java.awt.EventQueue.run(EventQueue.java:709)
    at java.awt.EventQueue.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
    at java.awt.EventQueue.run(EventQueue.java:733)
    at java.awt.EventQueue.run(EventQueue.java:731)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

我的 groovy 编译器设置如下:

我有两个建议供您尝试。

  1. 从 PDF 文档复制和粘贴可能会产生意外影响,因此请尝试直接输入代码。您也可以尝试运行 Zombies_Demo 示例模型,发现here. You can follow the instructions to import the example model in the "Linux users and Unix-related system users" section here。如果您仍然发现问题...
  2. 尝试将 Groovy 版本更改为 2.4。

如果这些建议有帮助,请告诉我们。