调用ApplicationManager.getApplication()返回null,无法获取IntelliJ已打开项目
解决IntelliJ API获取打开项目时ApplicationManager.getApplication()返回null的问题
问题原因
你直接通过main方法运行代码时,没有初始化IntelliJ平台的核心运行环境。IntelliJ的所有核心组件(包括ProjectManager)都依赖于IDE启动时创建的Application上下文实例,单独运行普通Java类时这个上下文完全不存在,所以ApplicationManager.getApplication()会返回null,最终导致调用ProjectManager.getInstance()时抛出空指针异常。
正确解决方案
IntelliJ平台API只能在IDE自身的运行环境内调用,你可以通过以下两种方式实现:
方案1:开发IntelliJ插件(正式场景)
- 新建一个IntelliJ插件项目(使用IntelliJ IDEA的Plugin SDK向导创建)
- 编写一个继承自
AnAction的动作类,在IDE内部执行代码:
import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectManager; public class ListOpenProjectsAction extends AnAction { @Override public void actionPerformed(AnActionEvent e) { Project[] openProjects = ProjectManager.getInstance().getOpenProjects(); for (Project project : openProjects) { System.out.println("已打开项目:" + project.getName()); // 推荐使用IDE日志系统输出,便于查看: // com.intellij.openapi.diagnostic.Logger.getInstance(getClass()).info("已打开项目:" + project.getName()); } } }
- 在插件配置文件
plugin.xml中注册该动作,比如添加到Tools菜单:
<actions> <action id="ListOpenProjectsAction" class="your.package.name.ListOpenProjectsAction" text="列出已打开项目" description="获取并打印IDE中所有已打开的项目"> <add-to-group group-id="ToolsMenu" anchor="last"/> </action> </actions>
- 运行插件配置,启动测试IDE后,在Tools菜单点击「列出已打开项目」即可正确获取所有打开的项目。
方案2:使用IDE内置脚本控制台(临时调试)
如果只是临时调试,无需开发插件,可以直接用IntelliJ的内置脚本控制台:
- 打开IDE的
Tools > IDE Script Console(或通过搜索「Script Console」找到) - 输入以下Groovy脚本并执行:
import com.intellij.openapi.project.ProjectManager def openProjects = ProjectManager.instance.openProjects openProjects.each { project -> println("已打开项目:${project.name}") }
执行后即可在控制台看到所有已打开的项目名称。
内容的提问来源于stack exchange,提问作者蒋莹莹
相关产品推荐
相关产品推荐

