在 AnyLogic 中为代理创建文本文件时出现 NullPointerExection 错误
Getting NullPointerExection error while creating a text file for an Agent in AnyLogic
我已经创建了一个代理,然后我将 Connectivity pallet 中的一个文本文件放入该代理模型中。一旦我 运行 模拟,它就会显示 NullPointerException 错误。在控制台中显示未知来源。尽管我在此之前创建了该文件并从属性托盘中放置了该文件的位置。我正在使用 AnyLogic 7 专业版。
Error window
日志:
模型启动时出错:
空指针异常
java.lang.NullPointerException
在 com.xj.anylogic.engine.Agent.getPresentation(来源不明)
在 com.xj.anylogic.engine.connectivity.TextFile。(未知来源)
在 com.xj.anylogic.engine.connectivity.TextFile。(未知来源)
在 warehouse.Worker.(Worker.java:71)
在 warehouse.Main._unloadingPerson_newUnit_xjal(Main.java:5246)
在 warehouse.Main.access$6(Main.java:5244)
在 warehouse.Main$7.newUnit(Main.java:1773)
在 com.xj.anylogic.libraries.processmodeling.ResourcePool.a(来源不明)
在 com.xj.anylogic.libraries.processmodeling.ResourcePool$b.a(未知来源)
在 com.xj.anylogic.libraries.processmodeling.ResourcePool.X(未知来源)
在 com.xj.anylogic.libraries.processmodeling.ResourcePool.onStartup(未知来源)
在 com.xj.anylogic.libraries.processmodeling.ResourcePool.start(未知来源)
在 warehouse.Main.start(Main.java:12747)
在 com.xj.anylogic.engine.Engine.start(来源不明)
在 com.xj.anylogic.engine.ExperimentSimulation.b(来源不明)
在 com.xj.anylogic.engine.ExperimentSimulation.run(来源不明)
在 warehouse.Simulation.executeShapeControlAction(Simulation.java:127)
Properties window of the text file
我不知道我做错了什么。
注意:当我将相同的文本文件放入主代理模型时,不会发生此错误。
更新: 我找到了解决方法。我将代理与主代理链接,然后将文件放入主代理中。之后,我从代理函数中调用了该文件。据我了解,我认为除了主代理之外,其他代理无法创建连接对象。不过我不确定。
由于您指出当同一个文本文件放在 main 上时它正在工作,因此可能是在代理访问该文件之前创建了代理...
这里有一些选项和检查
检查 1:确保文件可在数据文件夹下项目的资源部分访问。它不应该是灰色的,左边有一个绿点。
检查 2:您放置它的代理内的文件对象中的文件名旁边也应该有一个绿点。
备选方案1:使用代理内部的参数将存在于main上的文本文件传递给代理以使用它
备选方案 2:如果您的代理位于 main 上,您可以直接从代理访问 main 上的文本文件。
注意:
我认为让每个代理从他们自己内部访问完全相同的文本文件是不明智的。最好他们都访问同一个文件对象
我已经创建了一个代理,然后我将 Connectivity pallet 中的一个文本文件放入该代理模型中。一旦我 运行 模拟,它就会显示 NullPointerException 错误。在控制台中显示未知来源。尽管我在此之前创建了该文件并从属性托盘中放置了该文件的位置。我正在使用 AnyLogic 7 专业版。
Error window
日志:
模型启动时出错: 空指针异常 java.lang.NullPointerException 在 com.xj.anylogic.engine.Agent.getPresentation(来源不明) 在 com.xj.anylogic.engine.connectivity.TextFile。(未知来源) 在 com.xj.anylogic.engine.connectivity.TextFile。(未知来源) 在 warehouse.Worker.(Worker.java:71) 在 warehouse.Main._unloadingPerson_newUnit_xjal(Main.java:5246) 在 warehouse.Main.access$6(Main.java:5244) 在 warehouse.Main$7.newUnit(Main.java:1773) 在 com.xj.anylogic.libraries.processmodeling.ResourcePool.a(来源不明) 在 com.xj.anylogic.libraries.processmodeling.ResourcePool$b.a(未知来源) 在 com.xj.anylogic.libraries.processmodeling.ResourcePool.X(未知来源) 在 com.xj.anylogic.libraries.processmodeling.ResourcePool.onStartup(未知来源) 在 com.xj.anylogic.libraries.processmodeling.ResourcePool.start(未知来源) 在 warehouse.Main.start(Main.java:12747) 在 com.xj.anylogic.engine.Engine.start(来源不明) 在 com.xj.anylogic.engine.ExperimentSimulation.b(来源不明) 在 com.xj.anylogic.engine.ExperimentSimulation.run(来源不明) 在 warehouse.Simulation.executeShapeControlAction(Simulation.java:127)
Properties window of the text file
我不知道我做错了什么。 注意:当我将相同的文本文件放入主代理模型时,不会发生此错误。
更新: 我找到了解决方法。我将代理与主代理链接,然后将文件放入主代理中。之后,我从代理函数中调用了该文件。据我了解,我认为除了主代理之外,其他代理无法创建连接对象。不过我不确定。
由于您指出当同一个文本文件放在 main 上时它正在工作,因此可能是在代理访问该文件之前创建了代理...
这里有一些选项和检查
检查 1:确保文件可在数据文件夹下项目的资源部分访问。它不应该是灰色的,左边有一个绿点。
检查 2:您放置它的代理内的文件对象中的文件名旁边也应该有一个绿点。
备选方案1:使用代理内部的参数将存在于main上的文本文件传递给代理以使用它
备选方案 2:如果您的代理位于 main 上,您可以直接从代理访问 main 上的文本文件。
注意: 我认为让每个代理从他们自己内部访问完全相同的文本文件是不明智的。最好他们都访问同一个文件对象