在IntelliJ的Java项目中出现"cannot find Symbol"错误

173

我从GameManager.java类中调用一个静态单例实例。

HUD.getInstance().update(timeDelta);

HUD.java 包含了 HUD 类以及另外两个相关的类:HUDTextElementHUDElement。所有这些类都在同一根目录下:../src/org/mypackage

但是,在 IntelliJ 编译此项目时,当我调用 HUD.getInstance() 时,出现了找不到符号 HUD的错误提示。

这段代码在 Eclipse 中编译完全正常,有什么想法是出了什么问题吗?


2
你在两个文件中都导入了HUD类吗? - Alex Coleman
1
这是我遇到的唯一解决此问题的方法。 - Sahil SInghal
37个回答

305

选择“生成”->“重新生成项目”将解决此问题。


48
Java/IntelliJ的完全新手请注意:上述内容与“构建项目”不同。 - hiljusti
5
@JustinHill - 我熟悉Eclipse,但对IntelliJ不太了解。您能帮我区分一下这两者的区别,并提供一些有关如何使用IntelliJ的指导和链接吗?请保持原意并确保内容易于理解。谢谢。 - nanosoft
1
我可能比谷歌搜索还不如,因为我没有使用过Eclipse。我的评论只是“重建项目”和“构建项目”是不同的选项(我正在帮助一个遇到这个问题的人,他们没有注意到这两个选项之间的区别)。 - hiljusti
8
为什么这样做有效?清除缓存并重新启动甚至都没有起作用。 - b15
工作中...尝试运行“maven clean compile”,但这并没有解决问题。 - Omtara
显示剩余5条评论

91

我有同样的问题,通过点击"文件"> "无效缓存/重启"解决了它。


1
注意了 - 如果您有任何更改并且它们没有提交,它们将会丢失。 :) - Nikola
28
清空缓存不会导致丢失更改。我甚至不确定这该怎么实现。如果您保存了文件,它就已经被保存了,不管是IntelliJ的缓存还是提交到代码库中。 - Christopher Schneider
这里最新的答案是针对一个相当老的问题。 - Kawu
天啊,我正在运行Tomcat和一堆Spring Boot应用程序,我不想重新启动:( 我只需要重新编译最近成功编译和部署的一个单独的类,而我改变的只是一个布尔条件...为什么,Intellij,为什么?! - RAM237

60
我曾经也遇到过同样的问题,后来发现是因为我从未完全编译过这个新项目。所以右键点击并选择“编译”(在Mac上是shift-cmd-F9)解决了这个问题。似乎保存时编译不会“看到”未编译的文件。
在我的情况下,将src文件夹标记为源文件并没有帮助。

37

当我执行 Build -> Make Project 时,出现了相同的“无法找到符号”错误。我通过删除Maven /target 文件夹,右键点击我的项目模块并执行 Maven -> Reimport,最后执行 Build -> Rebuild Project 来解决了这个问题。这是在 IntelliJ Idea 13.1.5 上的解决方法。

事实证明,Maven -> Reimport 是关键,因为在我执行这个操作之前,这个问题重新出现了几次。


同样地,您也可以删除您的有问题的模块(在我的情况下是Gradle模块),然后使用“文件”->“从现有源导入模块”重新导入,这就是我不得不做的。尽管我还必须手动修改.idea文件才能使重新导入最终起作用:https://dev59.com/SmMk5IYBdhLWcg3w5Bzy - Frikster

35

这很可能是因为你的 ../src 文件夹在Intellij IDEA中没有被标记为“源”文件夹,因此它不知道在那里查找你的类。你可以在项目浏览器中右键单击该文件夹,然后选择“标记为源文件夹”来修复这个问题。


1是可能性,但2不会让他收到错误信息说找不到HUD,而是会提示没有getInstance/update方法的错误吧? - Alex Coleman
这个选项似乎已经消失了。 - clankill3r
不,它会转换为弹出选项:“标记目录为>” - Dracontis
我的src文件夹里包含了test文件夹和多个模块,在标记为源代码根目录后,我的问题变得更加严重了。 - Se Song
对我来说,这已经非常接近正确的答案了。我的源根目录已经被标记了,但是我必须先“取消标记为源根目录”,然后再将其标记为源根目录,以修复错误。 - Lawrence

20

我也遇到了同样的问题,回答中给出了很多解决方案。尝试所有这些解决方案花费了我相当长的时间,因此在这里,我想提出一种有系统的方法,以便您在遇到此错误时能更好地解决它。

检查以下内容,如有缺失请创建/更新

  1. 将src文件夹标记为源文件夹
  2. 确保.imls文件存在
  3. 启用注释处理
  4. 如果最近使用了@UtilityClass,则可能是原因之一,Bug链接

如果一切正常,请按照以下顺序尝试以下解决方案

  1. 重新编译文件/模块

  2. 如果以上方法无效,请尝试刷新Maven依赖项并使用Maven -> ReimportBuild -> Rebuild Project构建项目

  3. 尝试mvn clean install -DskipTests

  4. 尝试使IntelliJ缓存失效并重新启动IDE,使用File > Invalidate caches/ restart

  5. 删除.idea文件夹并重新导入项目

感谢所有回答这个问题的人,你可以参考他们的回答以获取有关每个步骤的更多描述。


2
尝试通过“文件”>“无效缓存/重启”来使IntelliJ缓存失效并重新启动IDE。 - Energy

19

对于我来说- 我尝试了这些步骤(无效化缓存并重启,Maven 重新导入),但它们没有起作用。所以我删除了 .idea.settings.project 文件夹并尝试了一下 - 它起作用了。


10
删除.idea文件夹解决了我的问题。 - Daniel D.
1
这个方法很有效,因为我的一些库存储在第二个驱动器上,而Windows更新(哦,它总是会带来麻烦)创建了一个引导分区,改变了驱动器的字母。即使在项目设置库下删除旧链接并重新添加它们也不起作用,直到我删除了.idea文件夹。然后,在构建菜单下出现了重新编译模块的选项。 - Andrew
我删除了 .idea、.build 和 .gradle 文件夹,这解决了我的问题。 - jMan

15

我解决了这个问题,右键单击Java文件夹并重新构建

IntelliJ截图


13

非常感谢迄今为止的帮助,结果证明解决方法是先编译HUD.java(右键单击文件->编译HUD.java)。在编译Java文件后,其余部分的项目可以顺利编译而没有任何问题。

我不太清楚为什么这样修复了它,或者为什么IntelliJ不会自动执行此操作,但根本错误似乎与IntelliJ无法正确处理在单个.java文件中具有多个类有关。


1
IntelliJ可以很好地处理单个文件中的多个类,只需要确保该文件在某个时刻被编译即可。 - Makoto
是的,除了我刚刚遇到了一个单独的类文件相同的问题。奇怪的是,在我运行这个maven命令之前,它一直都运行得很好:mvn com.zenjava:javafx-maven-plugin:2.0:fix-classpath。它的目的是将javafx jar从libs目录移动到当前JDK的ext目录中。我在这里找到了它:http://zenjava.com/javafx/maven/fix-classpath.html。 - nihilon

11

当我删除一个文件夹并将其复制粘贴回项目时,发生了这种情况。

右键单击项目文件夹 -> 重建 对我有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接