我们正在使用p2来更新我们的RCP应用程序,到目前为止这个工作到目前为止我已经意识到在某些情况下P2 IProfile是emty(不是null但是空的)并且当然总是返回emty结果查询。
仅在启动应用程序时发生这种情况,这意味着如果我稍后请求相同的配置文件,我会获得完整的配置文件。
IProfile的Javadoc提到了profile是特定状态的快照这一事实。 所以我似乎提前查询了ProfileRegistry,但配置文件尚未完成。 我在javadoc上找不到任何方法来等待配置文件正确填充。
我会很感激任何可以帮助我很好地解决这个问题的人,因为使用睡眠(有效)并不是一个可接受的解决方案。 谢谢。
答案 0 :(得分:0)
这是我实施的丑陋解决方案,基本上测试时间stam以确保配置文件已加载
// 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 ,但是我使用一种方法获取ProfileId,因为我有基于另一个外部p2配置文件的JUnit测试。