动作流程的状态可以在变量上下文中设置,ActionContext的相关代码如下。
public class ActionContext implements Map<String, Object>{ /** 正常的运行状态 */ public static final int RUNNING = 0; /** 返回值的状态,返回到动作被初始调用的地方 */ public static final int RETURN = 1; /** 取消的状态,取消当前的动作执行 */ public static final int CANCEL = 2; /** 打断状态,一般返回到上一个循环处 */ public static final int BREAK = 3; /** 继续从循环处执行 */ public static final int CONTINUE = 4; /** 抛出异常的状态,一般到异常处理处结束 */ public static final int EXCEPTION = 5; /** * 设置动作的执行状态。 * * @param status 执行状态 */ public void setStatus(int status) { } /** * 返回动作执行的状态。 * * @return 动作的执行状态 */ public int getStatus() { } }
如Break的实现代码如下。
public static void run(ActionContext context){ context.setStatus(ActionContext.BREAK); }
While动作的流程控制代码如下。
while(IfCreator.checkCondition(self, actionContext)){ Thing childActions = self.getThing("ChildAction@0"); for (Thing child : childActions.getChilds()) { Action action = world.getAction(child); if (action != null) { result = action.run(actionContext, null, true); } int sint = actionContext.getStatus(); if (sint != ActionContext.RUNNING) { break; } } //判断循环的状态 if (actionContext.getStatus() == ActionContext.BREAK) { actionContext.setStatus(ActionContext.RUNNING); break; } else if (actionContext.getStatus() == ActionContext.CONTINUE) { actionContext.setStatus(ActionContext.RUNNING); continue; } else if (actionContext.getStatus() != ActionContext.RUNNING) { break; } }
使用流程控制基本可以实现Java的所有流程控制语句模型,这里就不一一举例了。
Copyright © 2007-2019 XWorker.org 版权所有 沪ICP备08000575号