我试图找到关于此的任何信息但失败了,也许这里有人可以提供帮助。
我使用IzPack 5几个星期,这就是我的开始,所以我没有以前的IzPack 4经验。
我想做的是以下内容:
这最后一步,就是我看不到该怎么做。
我有一个实现InstallerListener接口的java类:
public class IzPackInstaller implements com.izforge.izpack.api.data.DynamicInstallerRequirementValidator,
com.izforge.izpack.api.event.InstallerListener {
这是我用于第2步的数据验证/ db存在检查和第3步创建的相同类,只是出于方便的原因,但它应该无关紧要
我重写
@Override
public void afterInstallerInitialization(AutomatedInstallData data)
throws Exception {
System.out.println("Called afterInstallerInitialization");
System.out.println("db.location=" + data.getVariable("db.location"));
System.out.println("db.force.creation=" + data.getVariable("db.force.creation"));
}
但它似乎完全被弃用,并且从未在运行时调用 - 使用System.out检查。 这同样适用于:
@Override
public void afterPacks(AutomatedInstallData data,
AbstractUIProgressHandler handler) throws Exception {
System.out.println("Never called!");
}
我也覆盖
@Override
public void afterPacks(List<Pack> packs, ProgressListener listener) { }
这叫做好吧,但是如何在这个方法中掌握AutomatedInstallData?或者我怎么能在这个阶段读取安装程序变量?
我想创建一个单例,我会在DynamicInstallerRequirementValidator.validateData()调用期间使用变量进行初始化,并在稍后的时间点获取变量,但它很难看,听起来像一个讨厌的解决方法 - 应该有一种方法实现InstallerListener接口并能够使用变量,不应该吗?
我真的很感激任何提示......
安东
答案 0 :(得分:0)
这不是一个非常干净的解决方案但是有一种方法可以在运行izpack java的任何地方获得AutomatedInstallData,而不会实际覆盖某些方法等。我不会在第一时间建议它,因为它有点棘手:)
public class Test {
InstallerContainer container = new ConsoleInstallerContainer();
AutomatedInstaller automatedInstaller = container.getComponent(AutomatedInstaller.class);
AutomatedInstallData installData;
public Test() throws IllegalAccessException, NoSuchFieldException {
Field f = AutomatedInstaller.class.getDeclaredField("installData");
f.setAccessible(true);
installData = (AutomatedInstallData)f.get(automatedInstaller);
}
etc...
现在您将可以访问AutomatedInstallData对象及其方法。