【问题标题】:How to catch a moment when Eclipse is creating a new project?如何捕捉 Eclipse 创建新项目的瞬间?
【发布时间】:2017-01-23 18:04:01
【问题描述】:

我正在为 Eclipse IDE 开发一个 CDT 插件。我想在创建项目时写入项目范围的首选项文件,或者只是存储信息以稍后识别该项目并写入文件。当 Eclipse 正在创建一个新项目并存储有关它的一些信息时,我如何才能抓住这一时刻?

【问题讨论】:

    标签: eclipse plugins eclipse-plugin eclipse-cdt


    【解决方案1】:

    您可以使用IResourceChangeListener 侦听器来侦听所有资源更改:

    ResourcesPlugin.getWorkspace().addResourceChangeListener(listener);
    

    监听器实现单一方法:

    public void resourceChanged(IResourceChangeEvent event)
    

    从您获得资源增量的事件中:

    IResourceDelta delta = event.getDelta();
    

    对于新资源,delta getKind() 方法将是 IResourceData.ADDED

    delta 有一个 getResource 方法,可以为您获取资源 - 您对 IProject 感兴趣。

    注意:增量可以包含嵌套条目。您可能需要使用delta的getAffectedChildren()方法来查找项目,或者使用accept方法访问delta中的所有节点。

    【讨论】:

    • Greg-449,检查了您的解决方案,我的听众在创建新项目时仅收到有关工作区根更改的通知,它不适合我,我可以存储一个包含现有项目实例的集合并使用您的回答stackoverflow.com/questions/20744012/…从工作区根目录检索所有项目,但是找到新项目需要线性时间,而且工作区的变化并不总是意味着出现了一个新项目。
    • Greg-449,我在Plugin的start()中添加了一个监听器是这样的:ResourcesPlugin.getWorkspace().addResourceChangeListener(new ResourceChangeListener());
    • 您可能需要查看顶层 delta 的子级或使用 accept 方法访问 delta 中的所有资源。在答案中添加了注释。
    • 谢谢,我明天试试。
    • 您可能需要使用基于WorkspaceJob 的东西在当前更新完成并再次解锁后运行您的代码。
    猜你喜欢
    • 2020-03-04
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    • 2011-05-01
    • 1970-01-01
    相关资源
    最近更新 更多