我正在关注 IzPack 文档用例Executing a Java Class with ProcessPanel并且在实现 onSuccess 和 onFail 元素所需的行为时遇到了一些困难,并且可以使用更熟悉 IzPack 4.3.5 的人的一些说明。
我已经定义了一个 java 条件 process.panel.condition,在调用 Java 类中的 run 方法后,我想用它来控制进程面板上下一个和上一个按钮的可用性。此运行方法将 true 或 false 分配给 process.panel.condition 条件下的静态字段 ConditionBoolean。
我的期望是当 process.panel.condition 为真时,我希望上一个按钮被禁用并启用下一个按钮。当 process.panel.condition 为 false 时,我希望补码发生-previous 变为启用,next 变为禁用。
相反,似乎正在发生的是上一个按钮分配正在工作,但下一个按钮始终处于启用状态。
谁能指出我为什么会看到这种行为以及我应该如何改变我的方法以实现我想要的行为?
下面是在 executeclass 元素中引用的 xml 定义和关联的 Java 类。
<conditions>
<condition type="java" id="process.panel.condition">
<java>
<class>MyClass</class>
<field>ConditionBoolean</field>
</java>
<returnvalue type="boolean">True</returnvalue>
</condition>
</conditions>
处理规范xml如下:
<processing>
<job name="Step 1">
<executeclass name="MyClass">
<arg>...</arg>
</executeclass>
</job>
<onFail previous="false" next="false" />
<onSuccess condition="!process.panel.condition" previous="true" next="false" />
<onSuccess condition="process.panel.condition" previous="false" next="true" />
</processing>
和 MyClass 实现:
import com.izforge.izpack.util.AbstractUIProcessHandler;
public class MyClasss {
public static boolean ConditionBoolean;
public void run(AbstractUIProcessHandler handler, String[] args) {
ConditionBoolean = false;
try {
...
ConditionBoolean = true;
} catch (Throwable e) {
handler.logOutput(e.getMessage(), false);
}
}
}