Otrzymanie komunikatu „nie można znaleźć symbolu” w projekcie Java w Intellij

98

Wykonuję to wywołanie statycznej instancji pojedynczej z klasy GameManager.java.

HUD.getInstance().update(timeDelta);

HUD.javazawiera HUDklasę, a także dwie inne powiązane klasy, HUDTextElementa HUDElement. Wszystkie klasy znajdują się w tej samej ścieżce głównej ../src/org/mypackage.

Jednak podczas kompilowania tego projektu Java w IntelliJ nie mogę znaleźć HUD symbolu w linii, w której wykonuję HUD.getInstance()połączenie.

Dokładnie ten sam kod kompiluje się dobrze w zaćmieniu, czy wiesz, na czym polega problem?

joe
źródło
1
Czy masz zaimportowaną klasę HUD w obu?
Alex Coleman
to jest jedyne rozwiązanie tego problemu, które działało dla mnie stackoverflow.com/a/56473166/8660553
Sahil SInghal

Odpowiedzi:

170

Wybierz Build-> Rebuild Project rozwiąże to

tiboo
źródło
20
Uwaga dla kompletnych noobów do Java / IntelliJ: powyżej różni się od „Build Project”
hiljusti
4
@JustinHill - Jestem dobrze zorientowany w zaćmieniu i nowy w IntelliJ. Czy możesz mi pomóc z szacunkiem do tego, jaka jest różnica między tymi dwoma a wszelkimi punktami / łączami, które pomagają mi rozliczać czas z IntellJ.
nanosoft
1
Jestem prawdopodobnie gorszym zasobem niż wyszukiwarka Google, nie korzystałem z Eclipse. Mój komentarz jest taki, że „Rebuild Project” i „Build Project” to różne opcje (pomagałem komuś, kto się z tym spotkał i nie zauważył różnicy między opcjami)
hiljusti
1
Dlaczego to zadziałało? Unieważnianie pamięci podręcznych i ponowne uruchamianie nawet nie działało.
b15
Zadziałało ... Próbowałem uruchomić "maven clean compile", ale to nie rozwiązało problemu
Omtara,
54

Miałem ten sam problem i okazuje się, że nigdy nie skompilowałem całkowicie nowego projektu. Więc kliknięcie prawym przyciskiem myszy i wybranie Kompiluj '' (shift-cmd-F9 na Macu) naprawiło to. Wygląda na to, że kompilacja przy zapisywaniu nie „widzi” nieskompilowanych plików.

Oznaczanie folderu src jako źródła nie pomogło w moim przypadku.

Sjoerd K
źródło
45

Miałem ten sam problem i naprawiłem go, klikając Plik> Unieważnij pamięć podręczną / uruchom ponownie

ganninu93
źródło
1
Uważaj - jeśli zdarzy ci się coś zmienić i nie zostaną one zatwierdzone, przepadną. :)
Nikola
6
Unieważnienie pamięci podręcznych nie powoduje utraty zmian. Nie jestem nawet pewien, jak to zadziała. Jeśli zapiszesz plik, zostanie on zapisany, niezależnie od buforowania IntelliJ lub zatwierdzania do repozytorium.
Christopher Schneider
Ocal moje życie, dziękuję.
Jadson Santos
29

Prawdopodobnie jest to Twój folder ../src nie jest oznaczony jako folder „źródłowy” w Intellij IDEA, więc nie wie, aby tam szukać, aby znaleźć Twoją klasę. Możesz kliknąć folder prawym przyciskiem myszy w eksploratorze projektów i wybrać opcję „oznacz jako folder źródłowy”, aby to naprawić.

Paul Sanwald
źródło
1 jest możliwe, ale czy 2 nie dałoby mu błędu mówiącego, że nie może znaleźć HUD, a raczej błędu mówiącego, że nie ma metody getInstance / update?
Alex Coleman
ta opcja wydaje się zniknąć.
clankill3r
Nie, zmienia się w opcje wyskakujące: „Oznacz katalog jako>”
Dracontis
Mój src zawiera folder testowy i wiele modułów, po oznaczeniu go jako Source Root mój problem jest najgorszy.
Se Song
Dla mnie było to bliskie właściwej odpowiedzi. Mój źródłowy katalog główny został już zaznaczony, ale musiałem „Odznacz jako źródło źródła”, a następnie ponownie oznaczyć go jako źródło źródłowe, aby naprawić błąd.
yanni
26

Otrzymałem ten sam błąd „nie można znaleźć symbolu”, kiedy to zrobiłem Build -> Make Project. Naprawiłem to, usuwając mój /targetfolder Maven , klikając prawym przyciskiem myszy mój moduł projektu i robiąc Maven -> Reimporti robiąc Build -> Rebuild Project. To było w IntelliJ Idea 13.1.5.

Okazuje się, że Maven -> Reimportbył kluczowy, ponieważ problem pojawił się kilka razy, zanim w końcu to zrobiłem.

Christian Wilkie
źródło
12

Dzięki za dotychczasową pomoc, okazuje się, że poprawką było najpierw skompilować HUD.java (kliknij prawym przyciskiem myszy plik-> Kompiluj HUD.java). Po skompilowaniu pliku java reszta projektu mogła zostać skompilowana bez żadnych problemów.

Naprawdę nie wiem, dlaczego to naprawiło lub dlaczego IntelliJ nie zrobił tego automatycznie, ale błąd root wydaje się mieć związek z tym, że IntelliJ nie obsługuje poprawnie wielu klas w jednym pliku .java.

joe
źródło
1
IntelliJ może obsługiwać wiele klas w jednym pliku, wystarczy mieć pewność, że plik został skompilowany w pewnym momencie.
Makoto
Tak, z wyjątkiem tego, że miałem ten sam problem z jednym plikiem klasy. Co dziwne, to było dobrze działa prawo, zanim wpadłem tego polecenia maven: mvn com.zenjava:javafx-maven-plugin:2.0:fix-classpath. Ma na celu przeniesienie jar javafx z katalogu libs do katalogu ext dla aktualnego pakietu JDK. Znalazłem to tutaj .
nihilon
7

Musiałem kliknąć projekt prawym przyciskiem myszy i wybrać „Reimport” z podmenu „Run Maven”.

bitsmcgee77
źródło
6

Dla mnie - wypróbowałem te kroki (Unieważnij pamięć podręczną i uruchom ponownie, Maven Reimport)), ale nie zadziałały. Więc usunięta .idea, .settingsoraz .projectfolder i próbował - to działało.

R11G
źródło
3
Usunięcie .ideafolderu zrobiło to za mnie.
Daniel D.
5

W moim projekcie używam mavena. Z jakiegoś powodu IntelliJ dawał mi tego rodzaju dziwne błędy. Uruchomiłem mvn w czystości i spróbowałem ponownej synchronizacji, a te błędy zniknęły.

Moiz Raja
źródło
1
clean to cykl życia maven. Używasz go, jeśli chcesz wyczyścić wszystkie pliki wyjściowe, które zostały utworzone przez projekt maven.
Moiz Raja,
4

Zdarzyło mi się to, gdy usunąłem folder, a następnie skopiowałem go i wkleiłem z powrotem do projektu.

Right-click project folder -> Rebuild pracował dla mnie.

Tomas Lukac
źródło
3

Napotkałem ten sam problem i jest wiele rozwiązań podanych w odpowiedzi, wypróbowanie wszystkich tych rozwiązań zajęło mi sporo czasu, więc tutaj chciałbym zaproponować podejście metodyczne, jeśli pojawi się ten błąd.

Sprawdź następujące rzeczy, utwórz / zaktualizuj, jeśli czegoś brakuje

  1. src jest oznaczony jako folder źródłowy
  2. Pliki .imls są obecne
  3. Przetwarzanie adnotacji jest włączone
  4. Jeśli ostatnio używałeś @UtilityClass, może to być również powód, Bug Link

Jeśli wszystko jest w porządku, możesz spróbować następujących rozwiązań w podanej kolejności

  1. Ponownie skompiluj plik / moduł

  2. Jeśli to nie rozwiązało problemu, spróbuj odświeżyć zależność maven i skompilować projekt przy użyciu Maven -> ReimportiBuild -> Rebuild Project

  3. Próbować mvn clean install -DskipTests

  4. Spróbuj unieważnić pamięć podręczną IntelliJ i zrestartuj IDE, używając File > Invalidate caches/ restart

  5. Usuń folder .idea i ponownie zaimportuj projekt

Podziękowania i podziękowania dla wszystkich, którzy odpowiedzieli na to pytanie, możesz odwołać się do ich odpowiedzi, aby uzyskać dokładniejszy opis każdego punktu.

Deepak Patankar
źródło
1
działa: Spróbuj unieważnić pamięć podręczną IntelliJ i zrestartuj IDE, używając Plik> Unieważnij cache / restart
Energia
2

Wiem, że to stare pytanie, ale zgodnie z moim niedawnym doświadczeniem dzieje się tak, ponieważ zasoby kompilacji są albo usuwane, albo Idea nie może rozpoznać ich jako źródła.

Gdziekolwiek pojawi się błąd, podaj źródła dla folderu / katalogu, a ten błąd musi zostać rozwiązany.

Czasami, nawet jeśli przypisujemy źródła dla całego folderu, poszczególne klasy mogą być nadal niedostępne. Dla początkujących użytkowników prostym rozwiązaniem jest zaimportowanie nowej kopii i ponowne zbudowanie aplikacji, aby była gotowa do użycia.

Po tym zaleca się wykonanie czystej instalacji.

Matt
źródło
2

ponowna kompilacja głównej klasy Application.java zrobiła to za mnie, kliknij prawym przyciskiem myszy klasę> Rekompiluj

Taranjit Kang
źródło
2

Wiem, że ten wątek jest stary, ale innym rozwiązaniem było uruchomienie

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

A na IntelliJ do CMD + Shift + A (Mac OS) -> wpisz „Reimport all Maven projects”.

Jeśli to nie zadziała, spróbuj wymusić ponowne pobranie zależności maven

$ mvn clean -U install -Dmaven.test.skip=true
edmar
źródło
W moim przypadku istniały klasy generowane automatycznie (na podstawie plików XML), do których odwoływały się inne części kodu. Podczas budowania z maven works, jeśli nie mvn installed, IntelliJ nie widział tych odniesień i zawiódł środowisko uruchomieniowe.
tokosh
2

Dla mnie był to problem z Lombok, ponieważ wymaga on włączenia przetwarzania adnotacji. Możesz znaleźć to pole wyboru naSettings > Build > Compiler > Annotation Processors

RaulDanielPopa
źródło
Dziękuję Ci! To naprawiło to dla mnie.
nyarasha
1

W moim przypadku problem polegał na użyciu eksperymentalnej funkcji Lombok @UtilityClass w moim projekcie java w Intellij Idea, aby oznaczyć metody klasy jako „statyczne”. Kiedy jawnie ustawiłem każdą metodę klasy jako „statyczną” zamiast używać adnotacji, wszystkie problemy z kompilacją zniknęły.

Baran
źródło
0

Ponieważ jest to pierwsze trafienie w Google wyszukujące błąd „intelliJ nie może znaleźć symbolu”, dorzucę również moje rozwiązanie.

Problem polegał na tym, że mój projekt pochodzi z Eclipse, a niektóre pliki zawierały zależności od klas, które zostały wygenerowane src/generated-sourcesprzez specyfikacje w pom.xml. Z jakiegoś powodu nie zostało to poprawnie wykonane, kiedy po raz pierwszy otworzyłem projekt, a odbudowanie / ponowne importowanie nie pomogło, więc pliki nigdy nie zostały wygenerowane.

Rozwiązaniem było kliknięcie modułu prawym przyciskiem myszy i wybranie Maven -> Generate Sources and Update FoldersTo rozwiązało problem i mogłem skompilować.

Araklaj
źródło
0

Upewnij się, że plik źródłowy klasy Java, do której próbujesz się odwołać, ma .javarozszerzenie. Tak było .ajw moim przypadku (musiałem wcisnąć „Utwórz aspekt” zamiast „Utwórz klasę” podczas jej tworzenia). IntelliJ pokazuje tę samą ikonę dla tego pliku, co dla „normalnej” klasy, ale kompilator nie widzi jej podczas budowania.

Zmiana, .ajaby .javanaprawić to w moim przypadku.

fracz
źródło
0

Czasami żądana klasa znajduje się w testkatalogu źródłowym. W każdym razie mi się to przytrafiło…

Sam Barnum
źródło
0

Miałem ten sam problem, poza tym, że importowałem klasy, dla których zależności nie były w jakiś sposób rozwiązywane. Odświeżyłem projekty maven, Rebuild Project. To nadal nie rozwiązało. Wygląda na to, że IntelliJ niepoprawnie buforował coś. Zrestartowałem IntelliJ i to rozwiązało zależności. Myślę, że w jakiś sposób wyczyściło pamięć podręczną.

MoneeK
źródło
0

Jeśli używasz Lombok, upewnij się, że masz włączone przetwarzanie adnotacji.

Muzammil
źródło
0

Widzę wiele odpowiedzi proponujących kompilację lub przebudowę, ale na wypadek, gdyby to nie rozwiązało problemu, po prostu zauważ, że IDEA może wykryć metodę, ale nie skompiluje się, jeśli masz wcześniejszą newwersję, tak jak będzie oczekując instancji.

wprowadź opis obrazu tutaj

Carlos López Marí
źródło
0

W moim przypadku miałem problem ze znalezieniem klasy z innego modułu. Wpom.xml , po prostu miałem tę zależność z <scope>compile</scope>określonym. Usunięcie tej linii pomogło.

nikiforovpizza
źródło
-1

Wiem, że to jest stare, ale dla każdego innego upewnij się, że brakująca klasa znajduje się w tym samym pakiecie co klasa, w której pojawia się błąd / skąd ją wywołujesz.

Pasha Shestakov
źródło
Głosowanie negatywne, ponieważ klasy mogą być importowane z innych pakietów. Ogólnie klasa docelowa musi zostać zaimportowana w ścieżce klas; podczas korzystania z Maven zależność musi być ustawiona poprawnie.
fxnn