0

IzPackドキュメントのユースケースに従ってProcessPanelを使用してJavaクラスを実行すると、onSuccess要素とonFail要素から目的の動作を実現するのが困難になり、IzPack4.3.5に精通している人からの説明を使用できます。

Javaクラスのrunメソッドが呼び出された後、プロセスパネルの次のボタンと前のボタンの可用性を制御するために使用するJava条件process.panel.conditionを定義しました。このrunメソッドは、process.panel.condition条件の基礎となる静的フィールドConditionBooleanにtrueまたはfalseを割り当てます。

私の期待は、process.panel.conditionがtrueの場合、前のボタンを無効にし、次のボタンを有効にすることです。process.panel.conditionがfalseの場合、補完を発生させたいのですが、前が有効になり、次が無効になります。

代わりに、前のボタンの割り当ては機能しているが、次のボタンは常に有効になっているように見えます。

なぜ私がこの行動を見ているのか、そして私の望ましい行動を達成するために私のアプローチをどのように変えるべきかを誰かが指摘できますか?

以下は、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 のブール値を返した場合でも、インストールは成功として扱われます [sic]。 void 戻り型。

この問題はバージョン 4.2.1 で修正され、run メソッドが正常に完了したかどうかを示すブール値を返すことができるようになりました。この問題は 2009 年 2 月に解決されましたが、質問で参照されているドキュメントは更新されていません。

run メソッドの戻り値を void から boolean に切り替えて結果を返すと、問題を解決できました。

于 2013-03-08T16:12:02.537 に答える