Привет на всякий случай, если другие люди найдут этот вопрос.
Приведенный выше пример работает только в контексте определенного конечного автомата пример.
Состояния не переходят автоматически, поскольку они охраняются событиями. Таким образом, только если конечный автомат находится в состоянии A, и определенное событие перехода запускается, конечный автомат продвигается. Это можно увидеть во фрагменте ниже
<state id="reset">
<transition event="watch.start" target="running"/>
</state>
Как дополнительное примечание, выполнение метода с тем же именем, что и состояние, как определено в примере StopWatch
, защищено EventListener, определенным в самом AbstractStateMachine
.
В рамках метода инициализации зарегистрирован новый слушатель.
engine.addListener(stateMachine, new EntryListener());
Этот слушатель вызывает метод с соответствующим именем состояния onEntry для нового состояния
public void onEntry(final TransitionTarget entered) {
invoke(entered.getId());
}
Так что, если вы хотите, чтобы ваше состояние вызывалось непрерывно, вам просто нужно удалить защитные элементы перехода в описании конечного автомата (SCXML).