gpt4 book ai didi

java - Apache Commons SCXML 状态机框架

转载 作者:行者123 更新时间:2023-12-02 00:54:40 24 4
gpt4 key购买 nike


我正在尝试使用 Apache SCXML 为 Java 应用程序定义状态机。但是,我遇到了问题,我不确定这是由于 SCXML 框架还是我做错了什么。
我的测试应用程序基于以下示例(没有 android 位):
http://commons.apache.org/scxml/usecases/scxml-stopwatch-on-android.html

文件 StopWatch.java ( http://commons.apache.org/scxml/xref-test/org/apache/commons/scxml/env/StopWatch.html )

public class StopWatch extends AbstractStateMachine {
public void reset() {

}

public void running() {
}

public void paused() {
}

public void stopped() {
}
}

问题是上述状态每次转换仅调用一次。它是否正确?只要状态机保持在给定状态,状态函数不就应该被连续调用吗?

谢谢!

最佳答案

您好,以防万一其他人发现这个问题。

上面的示例仅适用于定义的 state machine 的上下文中示例。

状态不会自动转换,因为它们受到事件的保护。因此,只有当状态机处于状态 A 并且定义的转换事件被触发时,状态机才会前进。这可以在下面的代码片段中看到

<state id="reset">
<transition event="watch.start" target="running"/>
</state>

作为补充说明,与 StopWatch 示例中定义的状态同名的方法的执行由 AbstractStateMachine 本身中定义的 EventListener 保护。作为初始化方法的一部分,注册了一个新的监听器。

engine.addListener(stateMachine, new EntryListener());

该监听器调用对应状态名称onEntry的方法进入新状态

public void onEntry(final TransitionTarget entered) {
invoke(entered.getId());
}

因此,如果您希望连续调用状态,只需删除状态机(SCXML)描述中的转换防护即可。

关于java - Apache Commons SCXML 状态机框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1410539/

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