当前位置: 首页 > 知识库问答 >
问题:

JDT SearchEngine抛出NullPointerException

寿嘉悦
2023-03-14

我正在尝试使用JDT SearchEngine查找对给定对象的引用。但在调用org.eclipse.jdt.core.search.SearchEngine的“search”方法时,我得到了一个“NullPointerException”。

以下是错误跟踪:

Java . lang . nullpointerexception at org . eclipse . JDT . internal . core . search . basicsearchengine . find matches(basicsearchengine . Java:214)at org . eclipse . JDT . internal . core . search . basicsearchengine . search(basicsearchengine . Java:515)at org . eclipse . JDT . core . search . search engine . search(search engine . Java:582)

以下是我用来执行搜索的方法:

private static void search(String elementName) { //elementName -> a method Name
        try {
            SearchPattern pattern = SearchPattern.createPattern(elementName, IJavaSearchConstants.METHOD,
                    IJavaSearchConstants.REFERENCES, SearchPattern.R_PATTERN_MATCH);

            IJavaSearchScope scope = SearchEngine.createWorkspaceScope();

            SearchRequestor requestor = new SearchRequestor() {
                @Override
                public void acceptSearchMatch(SearchMatch match) {
                    System.out.println("Element - " + match.getElement());
                }
            };

            SearchEngine searchEngine = new SearchEngine();
            SearchParticipant[] searchParticipants = new SearchParticipant[] { SearchEngine
                    .getDefaultSearchParticipant() };
            searchEngine.search(pattern, searchParticipants, scope, requestor, null);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

请参阅以下快照的“变量”窗口,检查传递给“searchEngine.search()”的参数值:

我认为问题在于“范围”的价值[在上面的“黑色”中突出显示]。这意味着“在这种情况下,”搜索引擎.create工作空间范围()“不会返回预期值。

注意:请注意,这是我的程序的一部分,它作为独立的java程序(不是eclipse插件)运行,使用JDT API解析给定的源代码(使用JDT-AST)。

在这种情况下(非eclipse插件程序)是否可以使用JDT SearchEngine,还是这个问题是由于其他原因?非常感谢您对此的回答。

共有1个答案

东方灵均
2023-03-14

不。如果不打开工作区,则无法使用搜索引擎。原因是搜索引擎依赖于日食文件系统抽象(I资源I文件IFolder等)。这仅在工作区打开时可用。

 类似资料:
  • 抛出异常的行为是否可能抛出不同的异常? 为了抛出异常,必须(可选地)分配新对象,并调用其构造函数(隐式调用fillinstacktrace)。在某些情况下,听起来像addSupressed也被称为。那么如果没有足够的内存会发生什么呢?JVM是否需要预分配内置异常?例如,(1/0)会抛出OutOfMemoryError而不是ArithmeticException吗? 此外,构造函数是一个方法调用,因

  • 问题内容: 我正在使用“ mvn install”编译一个开源项目,但最终结果为。我尝试执行,但输出为Java摘要,指示这是无效命令。 我正在使用,为什么会发生这种情况? 谢谢, 问题答案: 设置环境变量:

  • 问题内容: 当我遍历列表时,偶尔会得到一个。Google搜索通知我,这可能是因为我在迭代该列表时正在另一个线程中更改该列表,并且要使此问题消失,我应该使用…。 …除了我已经是。 显然,我在某处正在做一些 非常 愚蠢的事情。 是否有人对如何引发抛掷物有任何见识?如果有关系,我正在使用Java 5。 编辑: 由于我使用的转换器可能很重要,因此我以两种方式修改此列表: 在前面添加元素。() 使用subL

  • 问题内容: Java程序中的“思考”如下: 我期望输出如下: 但是得到 显然,try块抛出ClassNotFoundException,这是意外的。有什么想法为什么代码会抛出此错误而不是像预期的那样初始化Gum类? 问题答案: 你的类在包,所以他们完全合格的名称,和。仅接受标准名称: 参数: -所需类的完全限定名称。 将您的代码更改为:

  • 问题内容: 我想在我的存储库层中有一个选项来渴望加载实体,所以我尝试添加一种方法来渴望加载具有所有关系的问题实体,但是它会抛出MultipleBagFetchException。我怎样才能解决这个问题?我正在使用Hibernate 4.16。 我如何获得一个最初是延迟加载的问题对象,以期渴望加载所有关系? 问题答案: 在Hibernate和通常的ORM中,这是一个相当棘手的问题。 发生的情况是,许

  • 问题内容: 我想从我的对象生成一个JSON字符串: 每当我尝试这样做时,都会出现此错误: 这些是我的 BomItem 类的属性: 我引用的 BomModule 类的属性: 知道导致此错误的原因是什么?我该如何解决? 问题答案: 问题是您有一个循环引用。 在课程中,您引用的是: 显然,GSON完全不喜欢这种自我指涉。 解决方法是将模块设置为避免递归循环。这样我可以避免StackOverFlow-Ex