Получение «не удается найти символ» в проекте Java в Intellij


99

Я делаю этот вызов статическому экземпляру синглтона из класса GameManager.java.

HUD.getInstance().update(timeDelta);

HUD.javaсодержит HUDкласс, а также два других связанных класса HUDTextElementи HUDElement. Все классы находятся в одном корневом пути ../src/org/mypackage.

Однако при компиляции этого java-проекта в IntelliJ я не могу найти Symbol HUD в строке, в которой я HUD.getInstance()звоню.

Тот же самый код отлично компилируется в eclipse, есть идеи, в чем проблема?


1
У вас есть импортированный класс HUD в оба?
Alex Coleman

это единственное решение этой проблемы, которое сработало для меня stackoverflow.com/a/56473166/8660553
Сахил Сингхал 09

Ответы:


172

Выберите Build-> Rebuild Project решит эту проблему.


20
Примечание для полных новичков в Java / IntelliJ: приведенное выше отличается от «Build Project»
hiljusti

4
@JustinHill - я хорошо разбираюсь в eclipse и новичок в IntelliJ. Можете ли вы помочь мне в отношении того, в чем разница между этими двумя и любыми точками / ссылками, которые помогают мне рассчитывать свое время с IntellJ.
nanosoft

1
Я, наверное, худший ресурс, чем поиск в Google, я не пользовался Eclipse. Мой комментарий заключается в том, что «Rebuild Project» и «Build Project» - это разные варианты (я помогал кому-то, кто столкнулся с этим, и они не заметили разницы между вариантами)
hiljusti

1
Почему это сработало? Аннулирование кешей и перезапуск даже не помогли.
b15

Работает .... Пытался запустить "maven clean compile", но это не
решило

54

У меня была та же проблема, и оказалось, что я никогда полностью не компилировал новый проект. Поэтому щелчок правой кнопкой мыши и выбор «Компилировать» (shift-cmd-F9 на Mac) исправили это. Кажется, что компиляция при сохранении не «видит» нескомпилированные файлы.

Пометка папки src как источника в моем случае не помогла.


45

У меня была такая же проблема, и я исправил ее, щелкнув Файл> Недействительные кеши / перезапустить


1
Будьте осторожны - если у вас есть какие-либо изменения, и они не зафиксированы, они будут потеряны. :)
Nikola

6
Аннулирование кешей не приводит к потере изменений. Я даже не уверен, как это сработает. Если вы сохраняете файл, он сохраняется независимо от кеширования IntelliJ или фиксации в репозитории.
Кристофер Шнайдер,

Спаси мою жизнь, спасибо.
Жадсон Сантос,

29

Скорее всего, это ваша папка ../src, не отмеченная как «исходная» в Intellij IDEA, поэтому она не знает, как искать там ваш класс. Вы можете щелкнуть правой кнопкой мыши папку в проводнике проекта и выбрать «пометить как исходную папку», чтобы исправить это.


1 возможен, но разве 2 не выдаст ему ошибку о том, что он не может найти HUD, а скорее ошибку о том, что у него нет метода getInstance / update?
Alex Coleman

эта опция вроде бы пропала.
clankill3r

Нет, он трансформируется в параметры всплывающего окна: «Пометить каталог как>»
Драконтис

Мой src содержит тестовую папку внутри и несколько модулей, после того, как я пометил ее как Source Root, моя проблема стала хуже.
Се Сонг

Для меня это был близок к правильному ответу. Мой исходный корень уже был отмечен, но мне пришлось «Снять отметку как корень источников», а затем снова пометить его как корень источников, чтобы исправить ошибку.
yanni 03

26

Я получал ту же ошибку «не могу найти символ», когда это сделал Build -> Make Project. Я исправил это, удалив /targetпапку Maven , щелкнув правой кнопкой мыши модуль проекта и сделав Maven -> Reimport, и сделав Build -> Rebuild Project. Это было на IntelliJ Idea 13.1.5.

Оказывается, это Maven -> Reimportбыло ключевым моментом, поскольку проблема возникала несколько раз, прежде чем я, наконец, сделал это.


12

Спасибо за помощь, оказалось, что исправление заключалось в том, чтобы сначала скомпилировать 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 в каталог ext для текущего JDK. Я нашел это здесь .
nihilon

7

Мне пришлось щелкнуть проект правой кнопкой мыши и выбрать «Reimport» в подменю «Run Maven».


6

Для меня - я пробовал эти шаги (Invalidate Cache & Restart, Maven Reimport)), но они не сработали. Так что я удалил .idea, .settingsи .projectпапку и попробовал - он работал.


3
Удаление .ideaпапки сделало это за меня.
Дэниел Д.

5

Я использую maven в своем проекте. По какой-то причине IntelliJ выдавал мне такие странные ошибки. Я запустил mvn clean и попробовал выполнить повторную синхронизацию, и эти ошибки исчезли.


1
clean - это жизненный цикл maven. Вы используете его, если хотите очистить все выходные файлы, созданные проектом maven.
Moiz Raja

4

Это случилось со мной, когда я удалил папку, а затем скопировал ее обратно в проект.

Right-click project folder -> Rebuild работал у меня.


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, используя File> Invalidate caches / restart
Energy

2

Я знаю, что это старый вопрос, но, судя по моему недавнему опыту, это происходит из-за того, что ресурсы сборки либо удалены, либо Idea не может распознать их как источник.

Где бы ни возникла ошибка, укажите источники для папки / каталога, и эта ошибка должна быть устранена.

Иногда, даже когда мы назначаем источники для всей папки, отдельные классы все равно могут быть недоступны. Для начинающих пользователей простое решение - импортировать новую копию и создать приложение заново, чтобы все было в порядке.

После этого желательно выполнить чистую установку.


2

перекомпиляция основного класса Application.java сделала это за меня, щелкните правой кнопкой мыши класс> Перекомпилировать


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 installредактировать, IntelliJ не видел этих ссылок и не выполнял среду выполнения.
tokosh

2

Для меня это была проблема с Lombok, потому что он требует, чтобы была включена обработка аннотаций. Вы можете найти этот флажок наSettings > Build > Compiler > Annotation Processors


Спасибо! Это исправило это для меня.
ньяраша

1

В моем случае проблема заключалась в использовании экспериментальной функции Lombok @UtilityClass в моем java-проекте в Intellij Idea, чтобы аннотировать методы класса как «статические». Когда я явно сделал каждый метод класса «статическим» вместо использования аннотации, все проблемы с компиляцией исчезли.


0

Поскольку это первое попадание в Google при поиске ошибки «intelliJ не может найти символ», я также добавлю свое решение.

Проблема для меня заключалась в том, что мой проект возник из Eclipse, а некоторые файлы содержали зависимость от классов, которые были созданы в src/generated-sources спецификациями в pom.xml. По какой-то причине это не было выполнено должным образом, когда я впервые открыл проект, и восстановление / повторный импорт не помогло, поэтому файлы никогда не создавались.

Решение заключалось в том, чтобы щелкнуть модуль правой кнопкой мыши и выбрать пункт Maven -> Generate Sources and Update Folders«Проблема решена, и я могу скомпилировать».


0

Убедитесь, что исходный файл java-класса, на который вы пытаетесь сослаться, имеет .javaрасширение. Так было .ajв моем случае (при его создании я должен был нажать «Создать аспект» вместо «Создать класс»). IntelliJ показывает тот же значок для этого файла, что и для «обычного» класса, но компилятор не видит его при сборке.

Изменение .ajк .javaфиксированному это в моем случае.


0

Иногда нужный вам класс находится в testисходном каталоге. Во всяком случае, со мной случилось ...


0

У меня была та же проблема, за исключением того, что я импортировал классы, зависимости которых каким-то образом не разрешались. Я обновил проекты maven, Rebuild Project. Это все еще не разрешилось. Похоже, IntelliJ что-то кешировал неправильно. Я перезапустил IntelliJ, и это устранило зависимости. Я думаю, это как-то очистило кеш.


0

Если вы используете Lombok, убедитесь, что у вас включена обработка аннотаций.


0

Я вижу много ответов, предлагающих сборку или повторную сборку, но на всякий случай, если это не решит вашу проблему, просто обратите внимание, что IDEA может обнаружить метод, но он не будет компилироваться, если у вас есть newпредыдущий, поскольку он будет ожидая экземпляра.

введите описание изображения здесь


0

В моем случае у меня возникла проблема с поиском класса из другого модуля. В pom.xml, у меня просто была эта зависимость с <scope>compile</scope>указанным. Удаление этой строки помогло.


-1

Я знаю, что это устарело, но для всех остальных убедитесь, что отсутствующий класс находится в том же пакете, что и класс, в котором вы получили ошибку / откуда вы его вызываете.


Проголосовали против, так как классы можно импортировать из других пакетов. Как правило, целевой класс должен быть импортирован в путь к классам; при использовании Maven зависимость должна быть установлена ​​правильно.
fxnn 05
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.