diff --git a/src/main/java/com/serliunx/statemanagement/machine/DefaultConcurrentStateMachine.java b/src/main/java/com/serliunx/statemanagement/machine/DefaultConcurrentStateMachine.java index a10ad7f..66bdc8f 100644 --- a/src/main/java/com/serliunx/statemanagement/machine/DefaultConcurrentStateMachine.java +++ b/src/main/java/com/serliunx/statemanagement/machine/DefaultConcurrentStateMachine.java @@ -32,6 +32,11 @@ public class DefaultConcurrentStateMachine extends AbstractStateMachine im S initialState ) { super(stateList, new StateMachineContext<>(entryHandlers, leaveHandlers, exchangeHandlers, eventRegistries, executor, async, initialState)); + + final int initialIndex = indexOf(context.initialState); + if (initialIndex != -1) { + updateCurrentIndex(initialIndex); + } } @Override @@ -149,6 +154,11 @@ public class DefaultConcurrentStateMachine extends AbstractStateMachine im return get(index.get()); } + @Override + protected void updateCurrentIndex(int newIndex) { + this.index.set(newIndex); + } + /** * 是否为默认状态 */ diff --git a/src/main/java/com/serliunx/statemanagement/machine/StandardStateMachine.java b/src/main/java/com/serliunx/statemanagement/machine/StandardStateMachine.java index 59e1d50..e475758 100644 --- a/src/main/java/com/serliunx/statemanagement/machine/StandardStateMachine.java +++ b/src/main/java/com/serliunx/statemanagement/machine/StandardStateMachine.java @@ -36,5 +36,10 @@ public class StandardStateMachine extends AbstractStateMachine implements ) { super(stateList, new StateMachineContext<>(entryHandlers, leaveHandlers, exchangeHandlers, eventRegistries, executor, async, initialState)); + + final int initialIndex = indexOf(context.initialState); + if (initialIndex != -1) { + updateCurrentIndex(initialIndex); + } } } diff --git a/src/main/java/com/serliunx/statemanagement/manager/AbstractStateManager.java b/src/main/java/com/serliunx/statemanagement/manager/AbstractStateManager.java index 1187316..9dc273d 100644 --- a/src/main/java/com/serliunx/statemanagement/manager/AbstractStateManager.java +++ b/src/main/java/com/serliunx/statemanagement/manager/AbstractStateManager.java @@ -167,6 +167,9 @@ public abstract class AbstractStateManager implements StateManager { * @return 序号 {@link List#indexOf(Object)} */ protected int indexOf(S state) { + if (state == null) { + return -1; + } return stateList.indexOf(state); } diff --git a/src/test/java/com/serliunx/statemanagement/MachineTest.java b/src/test/java/com/serliunx/statemanagement/MachineTest.java index 94b2b05..7256e7c 100644 --- a/src/test/java/com/serliunx/statemanagement/MachineTest.java +++ b/src/test/java/com/serliunx/statemanagement/MachineTest.java @@ -42,8 +42,8 @@ public class MachineTest { .concurrent() .build(); - stateMachine.publish(PrinterEvent.TURN_OFF); - +// stateMachine.publish(PrinterEvent.TURN_OFF); + System.out.println(stateMachine.current()); stateMachine.close(); } }