gpt4 book ai didi

java - 调用后枚举变为空

转载 作者:行者123 更新时间:2023-12-01 15:57:18 25 4
gpt4 key购买 nike

public Boolean performAction(AppleCollectorAgent agent, data.ActionType action)
{
if(agent != null && action != null)
{
actions.put(agent, action);
}
else
{
System.out.println("GRID: "+agent+" performs "+action+" TID: "+Thread.currentThread().getId()+". Time: "+ new Date().getTime());
System.out.println("Either agent or action was null: "+agent+" - "+action);
}
}

被调用

ActionType ac = ActionType.ApplePickup;
System.out.println("AGENT: "+myAgent+" going to perform "+ac+" TID: "+Thread.currentThread().getId()+". Time: "+ new Date().getTime());
success = GridWorld.get().performAction((AppleCollectorAgent)myAgent, ac);

这对于枚举 Action 的其他值来说效果很好,但对于值 Action.PickupApple,actions.put 会抛出 NullPointerException。当我放置一些 println 来显示参数的值时,它变得更加奇怪。在调用之前,ac被打印为PickApple,而在performAction中,action被打印为null:

GRID:  Agents.GreedyAgent@1a42792 performs null TID: 29. Time: 1296317211796
Either agent or action was null: Agents.GreedyAgent@1a42792 - null
AGENT: Agents.GreedyAgent@1a42792 going to perform ApplePickup TID: 29. Time: 1296317211796

那么,在performAction中action怎么会变成null呢?

一些背景说明:对于多代理系统的类(class),我必须模拟网格世界,其中代理可以四处走动并捡起苹果。在每个模拟步骤中,每个代理可以执行一个 Action 。操作类型存储在枚举 data.Action 中。 actions是一个ConcurrentHashMap,其中每个agent存储了他想做的Action。当所有代理都完成此操作后,网格世界会处理所有这些并报告返回一个 boolean 值,表明操作成功。每个代理都有自己的线程,网格世界也是如此。在performAction()下面有一些同步机制。我首先认为这将是多线程出了问题,但我认为我可以放心这不是问题所在。操作为空,这就是问题所在。

最佳答案

从评论中推断,我想说 performAction 被调用了两次。特别是如果它似乎“有时”有效。一次将操作设置为 null,一次将操作设置为 PickApple。

如果是这种情况,您可以使用Thread.currentThread().getStackTrace()来确定该方法的调用位置。

关于java - 调用后枚举变为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4837382/

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