Próbuję uruchomić aplikację Java, ale pojawia się ten błąd:
java.lang.ClassNotFoundException:
Po dwukropku pojawia się lokalizacja brakującej klasy. Wiem jednak, że ta lokalizacja nie istnieje, ponieważ klasa znajduje się w innym miejscu. Jak mogę zaktualizować ścieżkę tej klasy? Czy ma to coś wspólnego ze ścieżką klasową?
java
class
classpath
classnotfoundexception
user2426316
źródło
źródło
Odpowiedzi:
Twoja ścieżka klas jest zepsuta (co jest bardzo częstym problemem w świecie Java).
W zależności od tego, jak uruchomisz aplikację, musisz zmienić argument
-cp
, wpis Class-Path w pliku MANIFEST.MF lub układ dysku.źródło
Ścieżka klas to lista lokalizacji, z których mają być ładowane klasy.
Te „lokalizacje” mogą być katalogami lub plikami jar.
W przypadku katalogów maszyna JVM będzie postępować zgodnie z oczekiwanym wzorcem ładowania klasy. Jeśli mam katalog C: / myproject / classes w mojej ścieżce klas i spróbuję załadować klasę com.mojafirma.Foo , w katalogu klas będzie szukać katalogu o nazwie com , a następnie w tym katalogu o nazwie mojafirma i w końcu będzie szukał pliku o nazwie Foo.class w tym katalogu.
W drugim przypadku, dla plików jar, przeszuka plik jar dla tej klasy. Plik jar jest w rzeczywistości po prostu spakowaną kolekcją katalogów, jak powyżej. Jeśli rozpakujesz plik jar, otrzymasz kilka katalogów i plików klas zgodnie z powyższym wzorcem.
Zatem maszyna JVM przemierza ścieżkę klasy od początku do końca, szukając definicji klasy, gdy próbuje załadować definicję klasy. Na przykład w ścieżce klas:
C: / mójproject / classes; C: /myproject/lib/stuff.jar; C: /myproject/lib/otherstuff.jar
JVM spróbuje najpierw przeszukać klasy katalogu , następnie stuff.jar, a na końcu otherstuff.jar .
Gdy otrzymasz ClassNotFoundException, oznacza to, że maszyna JVM przeszła przez całą ścieżkę klas i nie znalazła klasy, do której próbujesz się odwołać. Rozwiązaniem, jak to często bywa w świecie Java, jest sprawdzenie ścieżki klas.
Definiujesz ścieżkę klasy w wierszu poleceń, mówiąc java -cp, a następnie swoją ścieżkę klasy. W IDE, takim jak Eclipse, będziesz mieć opcję menu do określenia ścieżki klas.
źródło
To najlepsze rozwiązanie, jakie do tej pory znalazłem.
Załóżmy, że mamy pakiet o nazwie
org.mypackage
zawierający klasy:a pliki definiujące ten pakiet są fizycznie przechowywane w katalogu
D:\myprogram
(w systemie Windows) lub/home/user/myprogram
(w systemie Linux).Struktura pliku będzie wyglądać następująco:
Kiedy wzywamy Java, możemy określić nazwę aplikacji do uruchomienia:
org.mypackage.HelloWorld
. Jednak musimy również powiedzieć Javie, gdzie ma szukać plików i katalogów definiujących nasz pakiet. Aby więc uruchomić program, musimy użyć następującego polecenia:źródło
Jeśli znasz ścieżkę klasy lub jar zawierający klasę, dodaj go do swojej ścieżki klas podczas jej uruchamiania. Możesz użyć ścieżki klas, jak wspomniano tutaj:
w systemie Windows
w systemie UNIX / Linux
źródło
Wypróbuj te, jeśli używasz maven. Używam maven do mojego projektu, a kiedy robię
mvn clean install
i próbuję uruchomić program, zgłasza wyjątek. Czyszczę projekt i uruchamiam go ponownie, a dla mnie działa.Używam Eclipse IDE.
W przypadku wyjątku Nie znaleziono klasy podczas uruchamiania testu Junit spróbuj uruchomić
mvn clean test
raz. Skompiluje wszystkie klasy testowe.źródło
Aby dodać lokalizację klasy do ścieżki klas za pomocą wiersza poleceń, po prostu dodaj
-cp
lub-classpath
i lokalizację klasy podczas jej uruchamiania. TO ZNACZYLub jeśli używasz IDE, takiego jak eclipse, możesz kliknąć prawym przyciskiem myszy
project -> build path -> configure build path
i dodać zewnętrzny plik JAR zawierający twoją klasę do ścieżki budowania, wtedy powinno działać dobrze.źródło
Posługiwać się ';' jako separator. Jeśli zmienne środowiskowe są ustawione poprawnie, powinieneś zobaczyć swoje ustawienia. Jeśli twoje PATH i CLASSPATH są poprawne, Windows powinien rozpoznać te polecenia. NIE musisz ponownie uruchamiać komputera podczas instalacji oprogramowania Java.
źródło
Dodaj pełną ścieżkę do pliku jar do CLASSPATH. W Linuksie użycia:
export CLASSPATH=".:/full/path/to/file.jar:$CLASSPATH"
. Innym sposobem (bez edycji CLASSPATH) było rozpakowanie pliku jar w bieżącym folderze projektu.Sposoby nie zadziałały dla mnie:
1) Użycie
-cp
opcji z pełną ścieżką do pliku jar.2) Używanie
-cp
tylko z nazwą jar, gdy znajduje się w bieżącym folderze3) Kopiowanie jar do bieżącego folderu projektu
4) Kopiowanie pliku jar do standardowej lokalizacji plików jar java (/ usr / share / java)
To rozwiązanie jest raportowane dla klasy com.mysql.jdbc.Driver w mysql-connector-java.5 - *. Jar, działające na Linuksie z OpenJDK w wersji 1.7
źródło
Idź na górę i usuń instrukcję importu, jeśli istnieje, i ponownie zaimportuj klasę. Ale jeśli tak nie jest, zrób porządek, a następnie skompiluj. Czy używasz Netbeans czy Eclipse?
źródło
Wpadłem na to również i wypróbowałem wszystkie inne rozwiązania. Nie miałem pliku .class w folderze HTML, miałem tylko plik .java. Po dodaniu pliku .class program działał dobrze.
źródło
Może się tak zdarzyć, jeśli ścieżka klas jest nieprawidłowa
Załóżmy, że klasa możliwa do serializacji i klasa deserializowalna pod tą samą nazwą projektu. Uruchamiasz klasę możliwą do serializacji, tworząc obiekt możliwy do serializacji w określonym folderze. Teraz potrzebujesz zdesearializowanych danych. W międzyczasie, jeśli zmienisz nazwę projektu, to nie zadziała. Musisz najpierw uruchomić klasę możliwą do serializacji, a następnie zdeserializować plik.
źródło
Jeśli używasz mavena, spróbuj zaktualizować wszystkie projekty i wymusić tworzenie migawek. To również wyczyści i odbuduje całą ścieżkę klas. To rozwiązało mój problem.
źródło
właśnie zrobiłem
1. unieważnij pamięć podręczną i uruchom ponownie
2. Przebudowałem mój projekt, który rozwiązał problem
źródło
Próbowałem uruchomić .jar z kodu C # przy użyciu
Process
klasy. Kod java został pomyślnie uruchomiony z eclipse, ale nie pochodzi z C # Visual Studio, a nawet klikając bezpośrednio na plik jar, zawsze zatrzymywał się zClassNotFoundException:
wyjątkiem. Rozwiązaniem dla my, było wyeksportowanie programu java jako „Runnable JAR file” zamiast „JAR File”. Mam nadzieję, że to może komuś pomóc.źródło
Może się to zdarzyć w systemie Windows po aktualizacji java, w której brakuje starej wersji java SDK, a jest obecna nowa. Chciałbym sprawdzić, czy twoje IDE używa zainstalowanej wersji java SDK (IntelliJ: CTRL + SHIFT + ALT + S)
źródło
Jeśli dodano wiele bibliotek (innych firm) ** i klasy aplikacji rozszerzeń **
Wtedy może się to zdarzyć.
W tym celu musisz ustawić
multiDexEnabled true
i zamienić swoją rozszerzonąApplication
klasę naMultiDexApplication
.To zostanie rozwiązane.
źródło
Podstawowe pytanie ogólne - najprostsza ogólna odpowiedź;)
Biorąc pod uwagę informacje, zakładam, że możesz wypróbować podstawowe podejście do kodowania, budowania / kompilowania i uruchamiania prostej aplikacji konsolowej, takiej jak „Hello World”, używając prostego edytora tekstu i powłoki poleceń.
Ten błąd występuje w następującym scenariuszu:
Innymi słowy, użyj:
PS Dodanie rozszerzenia pliku .class powoduje ten sam błąd. Upewnij się również, że folder bin Javy (JDK / JRE) znajduje się w ścieżce zmiennej środowiskowej systemu operacyjnego (Wyszukaj więcej szczegółów w innych postach na ten temat) PPS Czy moje założenie / a jest poprawne?
źródło
Jeśli używasz mavena, sprawdź, czy masz tę wtyczkę w
pom.xml
:Umieści twoją zależność (powód wyjątku) w twoim słoiku.
FYI : będzie to obejmować wszystkie zależności zawyżone w ostatnim słoiku
źródło
W moim przypadku klasa wyrzucona jako wyjątek nie znaleziono klasy ma właściwości związane z certyfikatami ssl. Zamknij zaćmienie i otwórz za pomocą „Uruchom jako administrator”, a problem został rozwiązany. Ponieważ eclipse ma uprawnienia związane z wydaniem, zgłosi tego rodzaju wyjątek.
źródło
Umieść cały kod w bloku try, a następnie złap wyjątek w bloku catch
źródło