Eclipse 如何等待p2配置文件完成

Eclipse 如何等待p2配置文件完成,eclipse,p2,Eclipse,P2,我们正在使用p2来更新我们的RCP应用程序,到目前为止,它运行得非常好,直到今天我才意识到p2 IProfile在某些情况下是emty(不是null而是空的),并且总是返回emty结果查询 这种情况仅在启动应用程序时发生,这意味着如果我稍后请求相同的配置文件,我将获得完整的配置文件 IProfile的Javadoc提到了这样一个事实,即概要文件是特定状态的快照。 因此,我似乎要提前查询ProfileRegistry,而配置文件尚未完成。 我在javadoc上找不到任何方法来等待配置文件被正确填充

我们正在使用p2来更新我们的RCP应用程序,到目前为止,它运行得非常好,直到今天我才意识到p2 IProfile在某些情况下是emty(不是null而是空的),并且总是返回emty结果查询

这种情况仅在启动应用程序时发生,这意味着如果我稍后请求相同的配置文件,我将获得完整的配置文件

IProfile的Javadoc提到了这样一个事实,即概要文件是特定状态的快照。 因此,我似乎要提前查询ProfileRegistry,而配置文件尚未完成。 我在javadoc上找不到任何方法来等待配置文件被正确填充

我将感谢任何能帮助我很好地解决这个问题的人,因为使用睡眠(有效)不是一个可接受的解决方案。
谢谢

这是我实现的丑陋的解决方案,基本上是测试时间戳以确保配置文件已加载

// there seems to be a bug because if the agent is created too quickly then the profile is empty.
// so we loop until we get a proper profile
do {
    try {
       Thread.sleep(50);
    } catch (InterruptedException e) {
       interrupted = true;
    }
    if (agent != null) {
       agent.stop();
    }
    agent = agentProvider.createAgent(getP2AgentUri());
    IProfileRegistry profRegistry = (IProfileRegistry) agent.getService(IProfileRegistry.SERVICE_NAME);
    profile = profRegistry.getProfile(getP2ProfileId());
} while (profile != null && profile.getTimestamp() == 0 && !interrupted && !progress.isCanceled());

我使用的配置文件是SELF,但我使用一种方法来获取配置文件ID,因为我有基于另一个外部p2配置文件的JUnit测试。

欢迎使用p2 hell。你能展示你的代码吗?您何时查询配置文件注册表?您加载哪个配置文件?请看我的回复,我讨厌这种代码,如果你有更好的解决方案,我会很高兴。你什么时候开始执行这个循环?一个天真的猜测是P2机器在这一点上只是“不存在”,而您得到的配置文件是空的。这可能与Equinox容器中的bundle start levels有关。如果你看一下我写的内容,我从来没有说过配置文件是空的,这一点,配置文件不是空的,就像p2发现的,但还没有完全变红。这个循环在eclipse工作台创建之后立即在org.eclipse.ui.startup扩展点中启动。只是被“profile!=null”检查您的“while”语句弄糊涂了。然而,我不能重现这种不良行为。您是否检查了需要重新查询P2的次数?您还可以打开一些P2跟踪来查看更多正在发生的事情:或者调试到代码中。。。