CONSONS SCXML-力量跳到给定状态
-
29-09-2019 - |
题
我在用 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);
}
不隶属于 StackOverflow