gpt4 book ai didi

java - 尝试嵌入 NetLogo 时预期的命令错误

转载 作者:行者123 更新时间:2023-11-29 05:21:46 25 4
gpt4 key购买 nike

我正在尝试将 NetLogo 嵌入到一个小的个人项目中,但在第一个示例之后就卡住了。我设法构建并测试了这个示例:

https://github.com/NetLogo/NetLogo/wiki/Controlling-API#example-embedding

但现在我想摆脱读取示例 «fire» 文件。这就是我所做的:

import org.nlogo.lite.InterfaceComponent;
public class TestNetLogo {
public static void main(String[] argv) {
try {
final javax.swing.JFrame frame = new javax.swing.JFrame();
final InterfaceComponent comp = new InterfaceComponent(frame);
java.awt.EventQueue.invokeAndWait(
new Runnable() {
public void run() {
frame.setSize(800, 600);
frame.add(comp);
frame.setVisible(true);
}});
System.out.println("here");
comp.command("breed [turtles turtle]");
System.out.println("there");
}
catch(Exception ex) {
ex.printStackTrace();
}
}
}

用一个空字符串替换 "breed [turtles turtle]" 是可行的,但是对于一个非平凡的字符串,这就是我得到的:

Expected command. at position 33 in
at org.nlogo.compiler.CompilerExceptionThrowers$.exception(CompilerExceptionThrowers.scala:26)
at org.nlogo.compiler.ExpressionParser.parseStatement(ExpressionParser.scala:83)
at org.nlogo.compiler.ExpressionParser.parse(ExpressionParser.scala:55)
at org.nlogo.compiler.CompilerMain$$anonfun$compile$1.apply(CompilerMain.scala:34)
at org.nlogo.compiler.CompilerMain$$anonfun$compile$1.apply(CompilerMain.scala:29)
at scala.collection.Iterator$class.foreach(Iterator.scala:772)
at scala.collection.JavaConversions$JIteratorWrapper.foreach(JavaConversions.scala:573)
at scala.collection.IterableLike$class.foreach(IterableLike.scala:73)
at scala.collection.JavaConversions$JCollectionWrapper.foreach(JavaConversions.scala:592)
at org.nlogo.compiler.CompilerMain$.compile(CompilerMain.scala:29)
at org.nlogo.compiler.Compiler$.compileMoreCode(Compiler.scala:34)
at org.nlogo.workspace.Evaluator.org$nlogo$workspace$Evaluator$$invokeCompiler(Evaluator.scala:175)
at org.nlogo.workspace.Evaluator.evaluateCommands(Evaluator.scala:18)
at org.nlogo.workspace.AbstractWorkspaceTraits$Evaluating$class.evaluateCommands(AbstractWorkspaceScala.scala:163)
at org.nlogo.workspace.AbstractWorkspaceScala.evaluateCommands(AbstractWorkspaceScala.scala:19)
at org.nlogo.lite.AppletPanel.command(AppletPanel.scala:137)
at TestNetLogo.main(TestNetLogo.java:15)

这里有人有想法吗?

最佳答案

InterfaceComponent.command() 仅适用于命令——您在命令中心输入的任何内容。 breed [...] 是声明,不是命令。在 NetLogo 应用程序中,breed [...] 总是在代码选项卡中,从不在命令中心。

其次,为了完全使用 InterfaceComponent,必须打开某种模型 — 即使它是一个空模型,一个包含模型设置但没有代码或小部件的模型。

所以你的两个可能的解决路径是:

1) 合成一个包含模型(.nlogo 文件的完整内容)的字符串,其中包含您想要的代码选项卡代码(以及任何其他内容),然后使用 InterfaceComponent 的 openFromSource< 打开它 方法(它继承自 AppletPanel)。

2)打开一个空模型,然后调用InterfaceComponent的setProcedures方法(继承自AppletPanel)来替换编译Code选项卡中的内容。

如果你走路线#2,打开默认空模型的代码是:

comp.openFromSource(
org.nlogo.util.Utils.url2String(
org.nlogo.api.ModelReader.emptyModelPath()));

还没有测试过,但我认为这是正确的。

关于java - 尝试嵌入 NetLogo 时预期的命令错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24390853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com