Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Apache Commons SCXML状态机框架_Java_Apache Commons - Fatal编程技术网

Java Apache Commons SCXML状态机框架

Java Apache Commons SCXML状态机框架,java,apache-commons,Java,Apache Commons,我试图使用ApacheScXML为Java应用程序定义一个状态机。但是,我遇到了一个问题,我不确定这是因为SCXML框架还是我做错了什么。 我的测试应用程序基于以下示例(没有android位): 文件StopWatch.java() 问题是上述状态在每次转换中只调用一次。这是正确的吗?只要状态机保持在给定状态,状态函数就不应该被连续调用吗 谢谢 你为什么期待这种行为?您的state类只需要了解转换。一旦你过渡,你就处于稳定状态。你为什么会期望这种行为?您的state类只需要了解转换。一旦你过渡


我试图使用ApacheScXML为Java应用程序定义一个状态机。但是,我遇到了一个问题,我不确定这是因为SCXML框架还是我做错了什么。
我的测试应用程序基于以下示例(没有android位):

文件StopWatch.java()

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


谢谢

你为什么期待这种行为?您的state类只需要了解转换。一旦你过渡,你就处于稳定状态。

你为什么会期望这种行为?您的state类只需要了解转换。一旦你过渡,你就处于稳定状态。

你好,以防其他人发现这个问题

上述示例仅在已定义示例的上下文中有效

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

<state id="reset">
    <transition event="watch.start" target="running"/>
</state>
此侦听器调用具有相应状态名的方法,以尝试新状态

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

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

您好,以防其他人发现此问题

上述示例仅在已定义示例的上下文中有效

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

<state id="reset">
    <transition event="watch.start" target="running"/>
</state>
此侦听器调用具有相应状态名的方法,以尝试新状态

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

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

您误解了状态机的行为。状态的本质是,有时状态机对象会满足某些条件来执行某些活动或等待某些事件。当然,你可以通过在stopwatch类的函数中定义循环来描述,但是有什么意义吗?运行的函数有一个计时器线程,计时器任务可以看作是一个循环,不是吗?运行状态执行线程任务,只需等待事件退出此状态并停止任务。

您误解了状态机的行为。状态的本质是,有时状态机对象会满足某些条件来执行某些活动或等待某些事件。当然,你可以通过在stopwatch类的函数中定义循环来描述,但是有什么意义吗?运行的函数有一个计时器线程,计时器任务可以看作是一个循环,不是吗?运行状态执行线程任务,只需等待事件退出此状态并停止任务。

Hi-感谢您的回答。我一直认为状态机是由一个while循环和一个switch语句组成的,也就是说,只要当前状态是有效的,我就希望它能被执行——看答案,我当然可以在上面的状态中有一个while循环,但我认为这不是正确的做法,我认为框架可能期望状态函数在处理转换事件后返回。您好,谢谢您的回答。我一直认为状态机是由一个while循环和一个switch语句组成的,也就是说,只要当前状态是有效的,我就希望它能被执行——看答案,我当然可以在上面的状态中有一个while循环,但我认为这不是正确的做法,我认为框架可能期望状态函数在处理转换事件后返回。