我在用 Apache Commons SCXML, ,我想知道是否可以告诉状态机(SCXMlexecutor)跳到给定状态。

我不能使用 initialstate 属性,因为我希望状态机能够恢复(即从功率故障中),而我唯一拥有的是最后一个状态。这就是为什么我正在考虑告诉状态机直接跳到它的原因。

有帮助吗?

解决方案

在一般情况下“正常”)方式。一个更好的想法是用“重新启动”功能设计状态机,以输入“重新启动”事件实现,以及处理它所需的状态和过渡。

其他提示

这是一个古老的问题,但我只是打了这个问题,也需要一个答案,并认为它可能会帮助其他人回答。我将其用作单元测试的一部分,在此仅到达特定状态非常有用(我想确保,如果在状态A(如果发生一系列事件发生),它将转到状态B-并且仍然进行在我使用状态机XML修补后!)

我终于在SCXMLTESTHELPER中找到了此代码,它起作用了。只需将其称为执行人和目标状态即可。

public static void setCurrentState(SCXMLExecutor exec, final String id) throws IllegalArgumentException{
    try {
        exec.reset();
    } catch (ModelException me) {
        throw new IllegalArgumentException("Provided SCXMLExecutor "
                + "instance cannot be reset.");
    }
    TransitionTarget active = (TransitionTarget) exec.getStateMachine().
            getTargets().get(id);
    if (active == null) {
        throw new IllegalArgumentException("No target with id '" + id
                + "' present in state machine.");
    }
    Set current = exec.getCurrentStatus().getStates();
    current.clear();
    current.add(active);
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top