2010-08-19 35 views

回答

3

在一般情況下,跳轉到沒有狀態機「知道」它的狀態是一個非常糟糕的主意,因爲對於特定狀態的執行可能存在不滿足的前提條件(如果你達到了「正常」狀態)。更好的想法是設計具有「重啓」功能的狀態機,作爲輸入「重啓」事件以及處理它的狀態和轉換來實現。

+0

好主意。感謝您的寶貴意見。 – 2010-08-20 07:02:04

2

這是一個古老的問題,但我只是打了這個,需要一個答案,並認爲它可以幫助別人回答它。我使用它作爲單元測試的一部分,它對於進入特定狀態非常有用(我想確保如果在狀態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); 
}