Отримання “не можу знайти символ” у проекті Java в Intellij


96

Я роблю цей виклик статичному екземпляру однокласників з класу GameManager.java.

HUD.getInstance().update(timeDelta);

HUD.javaмістить HUDклас, а також два інших пов'язаних класи, HUDTextElementі HUDElement. Усі класи знаходяться в одному кореневому шляху ../src/org/mypackage.

Однак під час компіляції цього Java-проекту в IntelliJ я не можу знайти Symbol HUD на лінії, за якою я HUD.getInstance()телефоную.

Цей самий код просто прекрасно компілюється в затемненні, будь-яка ідея, в чому проблема?


1
Ви імпортуєте клас HUD в обох?
Alex Coleman

це єдине рішення цієї проблеми , яка працювала для мене stackoverflow.com/a/56473166/8660553
Сахил Singhal

Відповіді:


167

Виберіть Build-> Rebuild Project вирішить це


17
Примітка для повних noobs до Java / IntelliJ: вище відрізняється від "Build Project"
hiljusti

4
@JustinHill - Я добре обізнаний із затемненням і новачок у IntelliJ. Чи можете ви допомогти мені з повагою до того, яка різниця між ними та будь-якими пунктами / посиланнями, які допомагають мені розраховувати свій час з IntellJ.
nanosoft

1
Я, мабуть, гірший ресурс, ніж пошук у Google, я не використовував Eclipse. Мій коментар полягає лише в тому, що "Відновити проект" та "Проект побудови" - це різні варіанти (я допомагав тому, хто стикався з цим, і вони не помітили різниці між варіантами)
hiljusti

1
Чому це вдалося? Помилка кеш-пам’яті та перезапуск навіть не спрацювали.
b15

Працював .... Спробував запустити "maven clean compile", але це не
вирішило

54

У мене була та сама проблема, і виявляється, я ніколи не складав повністю новий проект. Тож клацніть правою кнопкою миші та виберіть Компілювати '' (shift-cmd-F9 на mac) це виправлено. Здається, компіляція при збереженні не "бачить" некомпільовані файли.

Позначення папки src як джерела в моєму випадку не допомогло.


44

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


1
Слідкуйте - якщо у вас трапляться якісь зміни, і вони не внесені, вони будуть втрачені. :)
Нікола

4
Недійсні кеші не призводять до втрачених змін. Я навіть не впевнений, як це могло би працювати. Якщо ви збережете файл, він буде збережений, незалежно від кешування IntelliJ або передачі даних до сховища.
Крістофер Шнайдер

29

Це, швидше за все, ваша папка ../src не позначена як "вихідна" папка в Intellij IDEA, тому вона не знає, куди шукати ваш клас. Ви можете клацнути правою кнопкою миші папку у провіднику проекту та вибрати "позначити як вихідну папку", щоб це виправити.


1 - це можливо, але хіба 2 не видасть йому помилку, сказавши, що не може знайти HUD, а скоріше помилку, кажучи, що не має методу getInstance / update?
Алекс Коулман,

цей варіант, схоже, зник.
clankill3r

Ні, це перетворюється на спливаючі параметри: "Позначити каталог як>"
Драконтіс

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

Для мене це було близько до правильної відповіді. Мій кореневий код джерела вже був позначений, але мені довелося "Видалити позначку як кореневий код джерел", а потім знову позначити його як кореневий код джерел, щоб виправити помилку.
yanni

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 може чудово обробляти декілька класів в одному файлі, йому просто потрібно бути впевненим, що файл у якийсь момент був скомпільований.
Макото

Так, за винятком того, що я просто мав ту саму проблему з одним файлом класу. Як не дивно, він був запущений тільки штраф права , перш ніж я запустив цю команду Maven: mvn com.zenjava:javafx-maven-plugin:2.0:fix-classpath. Він призначений для переміщення jar-файлу javafx з каталогу libs у каталог ext для поточного JDK. Я знайшов його тут .
nihilon

7

Мені довелося клацнути проект правою кнопкою миші та вибрати "Reimport" у підменю "Run Maven".


5

У своєму проекті я використовую maven. З якоїсь причини IntelliJ видавав мені такі дивні помилки. Я запустив mvn clean та спробував повторну синхронізацію, і ці помилки зникли.


1
clean - це життєвий цикл maven. Ви використовуєте його, якщо хочете очистити всі вихідні файли, створені проектом maven.
Moiz Raja

5

Для мене - я спробував ці кроки (Invalidate Cache & Restart, Maven Reimport)), але вони не спрацювали. Так що я видалив .idea, .settingsі .projectпапку і спробував - він працював.


3
Видалення .ideaпапки зробило це за мене.
Даніель Д.

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, скориставшись меню Файл> Недійсні кеші / перезапуск
Енергія

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

Для мене була проблема з Ломбоком, оскільки для цього потрібно ввімкнути обробку анотацій. Цей прапорець можна знайти на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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.