0

我正在关注 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);
        }
    }
}
4

2 回答 2

0

我从未见过带有点的非内置条件 id。所以它可能是 izpack 的一个错误,考虑到它仍然有各种奇怪的错误。考虑将 id 更改为“processPanelCondition”之类的东西。

于 2013-03-05T21:05:20.777 回答
0

在深入研究 IzPack 问题后,我发现IzPack-238即使 ProcessPanel 中的进程返回布尔值 false,安装也会被视为成功,这指出 IzPack 在调用 run 方法后会报告成功一个 void 返回类型。

此问题随后在 4.2.1 版本中进行了修补,以允许 run 方法具有一个布尔返回值,该值指示 run 方法是否成功完成。尽管该问题已在 2009-02 年得到解决,但问题中提到的文档并未更新。

在将 run 方法的返回值从 void 切换为 boolean 并返回结果后,我能够解决我的问题。

于 2013-03-08T16:12:02.537 回答