在Intellij的Java项目中获取“找不到符号”


94

我从类对静态单例实例进行了此调用GameManager.java

HUD.getInstance().update(timeDelta);

HUD.java包含HUD该类以及另外两个相关的类,HUDTextElementHUDElement。所有类都在同一根路径中../src/org/mypackage

但是,当在IntelliJ中编译此Java项目时,我在拨打电话的那一行上找不到Symbol HUDHUD.getInstance()

这个完全相同的代码在eclipse中可以很好地编译,您知道问题出在哪里吗?


1
两者中都导入了HUD类吗?
亚历克斯·科尔曼

这是为我解决此问题的唯一解决方案stackoverflow.com/a/56473166/8660553
Sahil SInghal

Answers:


163

选择Build-> Rebuild Project将解决它


15
Java / IntelliJ的完整技巧说明:上面的内容与“ Build Project”不同
hiljusti

4
@JustinHill-我对Eclipse非常熟悉,并且是IntelliJ的新手。您能否在这两个方面以及可以帮助我解决IntellJ问题的任何点/链接之间有什么区别方面帮助我?
nanosoft

1
我可能是比Google搜索更糟糕的资源,我还没有使用过Eclipse。我的评论只是“重建项目”和“构建项目”是不同的选项(我在帮助遇到此问题的人,他们没有注意到这些选项之间的区别)
hiljusti

1
为什么要这样做?使缓存无效并重新启动甚至都行不通。
b15

工作....尝试运行“行家清洁编译”,但不能解决问题
Omtara

54

我遇到了同样的问题,结果证明我从未完全编译过这个新项目。因此右键单击并选择编译''(Mac上为shift-cmd-F9)修复了该问题。似乎在保存时编译不会“看到”未编译的文件。

标记src文件夹为源并没有在我的情况有所帮助。


44

我遇到了同样的问题,并通过单击“文件”>“使缓存无效/重新启动”修复了该问题


1
提防 -如果您碰巧进行了任何更改而未提交,则将丢失它们。:)
Nikola

4
使缓存无效不会导致更改丢失。我什至不知道那将如何工作。如果保存文件,则无论IntelliJ缓存或提交到存储库如何,文件都会被保存。
Christopher Schneider

28

这可能是您的../src文件夹在Intellij IDEA中未标记为“源”文件夹,因此它不知道在那查找类。您可以右键单击项目浏览器中的文件夹,然后选择“标记为源文件夹”来解决此问题。


1是可能的,但是2不会给他一个错误,说它找不到HUD,而是一个错误,说它没有getInstance / update方法吗?
亚历克斯·科尔曼

这个选项似乎不见了。
clankill3r 2013年

不,它会转换为弹出选项:“将目录标记为>”
Dracontis

我的src在其中包含test文件夹和多个模块,将其标记为Source Root后,我的问题最严重。
Se Song

对我来说,这接近正确的答案。我的源根目录已被标记,但是我必须“取消标记为源根目录”,然后再次将其标记为源根目录,以修复错误。

26

这样做时,我遇到了同样的“找不到符号”错误Build -> Make Project。我通过删除Maven /target文件夹,右键单击我的项目模块并执行Maven -> Reimport,并进行来解决此问题Build -> Rebuild Project。这是在IntelliJ Idea 13.1.5上。

事实证明这Maven -> Reimport是关键,因为问题在我最终做到之前已经浮出水面了几次。


12

感谢到目前为止的帮助,事实证明,解决方法是首先编译HUD.java(右键单击文件-> Compile HUD.java)。编译完Java文件后,其余的项目都可以编译而没有任何问题。

我真的不知道为什么要修复它,或者为什么IntelliJ不能自动做到这一点,但是根源错误似乎与IntelliJ不能正确处理单个.java文件中的多个类有关。


1
IntelliJ可以很好地处理单个文件中的多个类,只需要确保该文件在某个时刻已编译即可。
Makoto 2012年

是的,除了我只有一个类文件有同样的问题。奇怪的是,在我运行以下maven命令之前,它一直运行良好mvn com.zenjava:javafx-maven-plugin:2.0:fix-classpath。这意味着将javafx jar从libs目录移动到当前JDK的ext目录。我在这里找到的。
nihilon

7

我必须右键单击该项目,然后在“运行Maven”子菜单下选择“重新导入”。


5

我在项目中使用Maven。由于某种原因,IntelliJ会给我这些奇怪的错误。我运行了mvn clean并尝试了重新同步,这些错误消失了。


1
清洁是一个行家的生命周期。如果要清除由maven项目创建的所有输出文件,则可以使用它。
Moiz Raja 2013年

5

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


3
删除.idea文件夹对我有用。
Daniel D.


3

我遇到了同样的问题,答案中提供了很多解决方案,尝试所有这些解决方案都花了我很多时间,所以如果您遇到此错误,在这里我想提出一种有条理的方法。

检查以下内容,如果缺少则创建/更新

  1. src文件夹被标记为源文件夹
  2. .imls文件存在
  3. 注释处理已启用
  4. 如果您最近使用过@UtilityClass,那也可能是原因,错误链接

如果一切正常,您可以尝试按给定顺序执行以下解决方案

  1. 重新编译文件/模块

  2. 如果那不能解决问题,请尝试报告Maven依赖关系,并使用Maven -> Reimport和构建项目Build -> Rebuild Project

  3. 尝试 mvn clean install -DskipTests

  4. 尝试使用以下方法使IntelliJ缓存无效并重新启动IDE: File > Invalidate caches/ restart

  5. 删除.idea文件夹,然后重新导入项目

谢谢,回答这个问题的每个人,您可以参考每个问题的答案以获取更多详细信息。


1
作品:尝试使IntelliJ缓存无效并重新启动IDE,方法是使用“文件”>“使缓存无效/重新启动”
Energy

2

我知道这是一个老问题,但是根据我最近的经验,发生这种情况是因为构建资源被删除,或者Idea无法将其识别为源。

无论错误出现在何处,都应提供文件夹/目录的来源,并且必须解决此错误。

有时,即使当我们为整个文件夹分配源时,单个类仍可能不可用。对于新手用户,简单的解决方案是导入一个新副本并再次构建该应用程序以备不时之需。

建议在此之后进行全新安装。



2

我知道这个线程很旧,但是,另一个解决方案是运行

$ mvn clean install -Dmaven.test.skip=true

然后在IntelliJ上执行CMD + Shift + A(mac os)->键入“重新导入所有Maven项目”。

如果这样不起作用,请尝试强制重新下载Maven依赖项

$ mvn clean -U install -Dmaven.test.skip=true

在我的情况下,代码的其他部分引用了自动生成的类(基于XML文件)。使用maven进行构建时,如果不进行mvn installed,则IntelliJ不会看到这些引用,并且会导致运行环境失败。
tokosh

2

对我来说,Lombok存在问题,因为它需要启用注释处理。您可以在以下位置找到此复选框Settings > Build > Compiler > Annotation Processors


谢谢!这为我解决了。
nyarasha

1

就我而言,问题在于在我的Intellij Idea的java项目中使用Lombok的实验功能@UtilityClass将类方法注释为“静态”。当我将类的每个方法显式设置为“静态”而不是使用批注时,所有编译问题都消失了。


0

由于这是Google搜索“ intelliJ找不到符号”错误的第一击,因此我也将提出自己的解决方案。

对我来说,问题是我的项目源自Eclipse,并且某些文件包含对src/generated-sourcespom.xml 中规范所生成的类的依赖。由于某种原因,当我第一次打开项目时,此操作未正确执行,并且重建/重新导入没有帮助,因此从未生成文件。

解决的办法是右键单击该模块,然后选择Maven -> Generate Sources and Update Folders“解决了该问题,然后可以编译”。


0

确保您要引用的Java类的源文件具有.java扩展名。就.aj我而言(创建时必须点击“创建方面”而不是“创建类”)。IntelliJ对该文件显示与“普通”类相同的图标,但编译器在生成时看不到该图标。

改变.aj.java解决我的情况。



0

除了要导入依赖项无法解决的类外,我遇到了同样的问题。我刷新了Maven项目,即Rebuild Project。它仍然没有解决。看起来IntelliJ缓存不正确。我重新启动了IntelliJ,并解决了依赖性。我想它以某种方式清除了缓存。



0

我看到了很多建议进行构建或重新构建的答案,但是以防万一这不能解决您的问题,只是请注意,IDEA可以检测到一个方法,但是如果您new之前有过,它将无法编译。期待实例。

在此处输入图片说明


0

就我而言,我在从另一个模块中查找类时遇到了问题。在中pom.xml,我只是使用了<scope>compile</scope>指定的依赖项。删除此行很有帮助。


-1

我知道这很旧,但对于其他任何人,请确保所缺少的类与错误发生所在/从何处调用该错误的类位于同一包中。


可以投票,因为可以从其他包中导入类。通常,目标类必须在类路径中导入。使用Maven时,必须正确设置依赖项。
fxnn
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.