通过Java网关链接Netlogo和Python

通过Java网关链接Netlogo和Python,python,netlogo,Python,Netlogo,我试图使用nl4py通过java桥连接Python和Netlogo。在尝试了此处所述的一切之后,我不断收到一个错误:。我正在使用MAC和python 2.7 我也尝试过不用nl4py,直接使用py4j手动完成。但是当我尝试从py4j.Java\u Gateway调用导入Java\u Gateway时,我得到了错误: Traceback (most recent call last): File "/Users/user/Desktop/Machines Model/pythonjavanet

我试图使用nl4py通过java桥连接Python和Netlogo。在尝试了此处所述的一切之后,我不断收到一个错误:。我正在使用MAC和python 2.7

我也尝试过不用nl4py,直接使用py4j手动完成。但是当我尝试从py4j.Java\u Gateway调用
导入Java\u Gateway
时,我得到了错误:

Traceback (most recent call last):
  File "/Users/user/Desktop/Machines Model/pythonjavanetlogolink.py", line 1, in <module>
    from py4j.Java_Gateway import Java_Gateway
ImportError: No module named Java_Gateway'
回溯(最近一次呼叫最后一次):
文件“/Users/user/Desktop/Machines Model/python_link.py”,第13行,在
workspace.openModel(模型)
openModel中的文件“/Library/Python/2.7/site packages/nl4py/netlogheadlessworkspace.py”,第52行
self.\u桥.openModel(self.\u会话,self.\u路径)
文件“/Library/Python/2.7/site packages/py4j/java_gateway.py”,第1286行,在__
回答,self.gateway\u客户端,self.target\u id,self.name)
文件“/Library/Python/2.7/site packages/py4j/protocol.py”,第328行,在get_return_值中
格式(目标id,“.”,名称),值)
py4j.protocol.Py4JJavaError:调用t.openModel时出错。
:java.lang.NoSuchMethodError:org.nlogo.headless.HeadlessWorkspace.open(Ljava/lang/String;)V
位于nl4py.server.HeadlessWorkspaceController.openModel(HeadlessWorkspaceController.java:133)
位于nl4py.server.netlogcontrollerserver.openModel(netlogcontrollerserver.java:100)
位于java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
位于java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
位于java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
位于java.base/java.lang.reflect.Method.invoke(Method.java:567)
位于py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)
位于py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
在py4j.Gateway.invoke处(Gateway.java:282)
位于py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
在py4j.commands.CallCommand.execute(CallCommand.java:79)
在py4j.GatewayConnection.run处(GatewayConnection.java:214)
位于java.base/java.lang.Thread.run(Thread.java:835)

哇,我真的想放弃,决定尝试不同的NetLogo版本,结果成功了。因此,对于有相同/类似问题的人,请尝试在NL 6.0.4或更高版本上运行它。他们在最新版本中更改了一些目录,因此无法使用。

感谢您提出此问题!NetLogo 6.1.0的NetLogo控制API更改为
HeadlessWorkspace.open(…)
方法,这导致了与NL4Py的兼容性问题。有关此问题的更多信息,请参见

我已经发布了一个版本的修复程序,现在应该支持NetLogo 6.0和NetLogo 6.1

请,
pip安装——升级nl4py
。如果问题仍然存在,请务必通知我。谢谢

Traceback (most recent call last):
  File "/Users/user/Desktop/Machines Model/python_link.py", line 13, in <module>
    workspace.openModel(model)
  File "/Library/Python/2.7/site-packages/nl4py/NetLogoHeadlessWorkspace.py", line 52, in openModel
    self.__bridge.openModel(self.__session,self.__path)
  File "/Library/Python/2.7/site-packages/py4j/java_gateway.py", line 1286, in __call__
    answer, self.gateway_client, self.target_id, self.name)
  File "/Library/Python/2.7/site-packages/py4j/protocol.py", line 328, in get_return_value
    format(target_id, ".", name), value)
py4j.protocol.Py4JJavaError: An error occurred while calling t.openModel.
: java.lang.NoSuchMethodError: org.nlogo.headless.HeadlessWorkspace.open(Ljava/lang/String;)V
    at nl4py.server.HeadlessWorkspaceController.openModel(HeadlessWorkspaceController.java:133)
    at nl4py.server.NetLogoControllerServer.openModel(NetLogoControllerServer.java:100)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)
    at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
    at py4j.Gateway.invoke(Gateway.java:282)
    at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
    at py4j.commands.CallCommand.execute(CallCommand.java:79)
    at py4j.GatewayConnection.run(GatewayConnection.java:214)
    at java.base/java.lang.Thread.run(Thread.java:835)