Remediere: nu s-a putut găsi sau încărca clasa principală

Eroarea „ Nu s -a putut găsi sau încărca clasa principală ” apare atunci când se utilizează o comandă java în promptul de comandă pentru a lansa un program Java specificând numele clasei în terminal. Motivul pentru care se întâmplă acest lucru se datorează în principal greșelii de programare a utilizatorului în timpul declarării clasei.

Nu am putut găsi sau încărca clasa principală în linia de comandă Java

Așa cum am menționat anterior, această eroare nu este în mare parte legată de sistem și utilizatorul face o greșeală în mai multe scenarii, așa cum se arată mai jos. Înainte de a merge mai departe, presupunem că aveți cunoștințe de bază despre limbajul de programare Java și cum funcționează.

Ce cauzează eroarea „Nu s-a putut găsi sau încărca clasa principală” în Java?

Mesajul „Nu s-a putut găsi sau încărca clasa principală” înseamnă că primul pas al motorului Java care preia clasa pentru execuție a eșuat. Comanda java nu a reușit să localizeze clasa în directorul corect.

În unele cazuri, trebuie să adăugați calea corectă a fișierului și să îndreptați terminalul Java către locația corectă. Deoarece executați comanda de la terminalul din linia de comandă, computerul nu știe unde se găsește clasa sau unde se află. În IDE-urile vizate, aceasta nu este problema, deoarece IDE păstrează un pointer îndreptat către directorul de lucru curent.

Ce este sintaxa „java”?

Înainte de a începe depanarea de ce terminalul ne întoarce o eroare atunci când încercăm să executăm, mai întâi trebuie să ne uităm la sintaxa comenzii. Dacă nu utilizați sintaxa corectă, vă veți confrunta inevitabil cu această eroare.

Sintaxa normală a comenzii este cam așa:

 java [...] [...]

Iată o opțiune de linie de comandă, este un nume de clasă Java complet calificat și este un argument de linie de comandă care este transmis aplicației dvs. atunci când este compilat întregul pachet.

Un exemplu de comandă validă este:

java -Xmx100m com.acme.example.ListAppuals săgețile kevin bart

Comanda de mai sus va face ca comanda java să execute următoarele operații:

  • Se va căuta o versiune compilată a clasei „ com.acme.example.ListAppuals ”.
  • După căutare, va încărca clasa.
  • Apoi, când clasa este încărcată, clasa va fi căutată pentru o metodă „principală” cu o semnătură validă, modificatori și tip de returnare. Un eșantion de clasă principală ar fi ceva de genul:
public static main main (String [])
  • Metoda va fi apelată cu argumentele „kevin”, „săgeți” și „bart” ca șir [].

Cum se remediază „Nu s-a putut găsi sau încărca clasa principală”

Soluția 1: Verificarea argumentului pentru numele clasei

Cea mai frecventă greșeală pe care o fac utilizatorii este că furnizează un nume greșit de clasă ca argument (sau un nume corect de clasă este o formă greșită). Deoarece declarăm parametrii pe linia de comandă, este foarte probabil să treceți argumentul nume de clasă într-o formă greșită. Aici vom enumera toate scenariile posibile în care puteți greși.

  • Scrierea unui nume simplu de clasă . Dacă declarați clasa într-un pachet precum „com.acme.example”, trebuie să utilizați numele complet al clasei, inclusiv pachetul în comanda Java.
java com.acme.example.ListAppuals

in loc de

java ListAppuals
  • Ar trebui declarați un nume de clasă în loc să declarați un nume de fișier sau o cale. Java nu preia clasa dacă declarați o cale / nume de fișier pentru aceasta. Intrările incorecte includ următoarele:
java ListAppuals.class java com / acme / example / ListAppuals.class
  • Carcasa trebuie luată în considerare. Comenzile Java sunt sensibile la majuscule și minuscule și dacă faceți o greșeală de chiar o literă, nu veți putea încărca clasa principală. Un exemplu de greșeli incorecte sunt:
java com.acme.example.listappuals
  • Nu trebuie să declarați un nume de fișier sursă . Așa cum am menționat anterior, trebuie doar să declarați clasa în formatul complet complet al numelui de clasă. Exemplu de greșeală este:
java ListAppuals.java
  • Această eroare va apărea și dacă faceți o greșeală de tastare sau uitați să scrieți numele clasei în întregime .

Dacă ați făcut greșeli neglijent în declararea numelui clasei, asigurați-vă că ați remediat-o și apoi încercați să lansați programul.

Soluția 2: Verificarea clasei

Dacă ați declarat corect numele de clasă, dar vi se afișează în continuare eroarea, este posibil ca comanda java să nu poată găsi numele de clasă specificat pe cale. Classpath este o cale în care Java runtime caută resurse și fișiere de clasă. Puteți seta cu ușurință calea de clasă folosind două comenzi diferite, după cum se arată mai jos:

C:> sdkTool -classpath classpath1; classpath2 ... C:> set CLASSPATH = classpath1; classpath2 ...

Pentru a obține mai multe informații cu privire la calea clasei, ar trebui să consultați următoarele documente.

Documentație de comandă Java

Setarea clasei

Soluția 3: Verificarea directorului

Când declarați un director ca o cale de clasă, acesta va corespunde întotdeauna rădăcinii spațiului de nume. De exemplu, dacă „/ usr / local / acme / classes” se află pe classpath, atunci Java va căuta o clasă „com.acme.example.Appuals”. Va căuta o clasă cu următorul nume de cale:

/usr/local/acme/classes/com/acme/example/Appuals.class

Deci, în esență, dacă puneți următoarea adresă în clasă, Java nu va putea găsi clasa:

/ usr / local / acme / classes / com / acme / example

De asemenea, ar trebui să verificați subdirectorul și să vedeți dacă se potrivește cu FQN. Dacă FQN clasele dvs. este „com.acme.example.Appuals”, atunci Java va căuta o „Appuals.class” în directorul „com / acme / example”.

Pentru a vă oferi un exemplu, să presupunem următorul scenariu:

  • Clasa pe care doriți să o rulați este: com.acme.example.Appuals
  • Calea completă a fișierului este: /usr/local/acme/classes/com/acme/example/Appuals.class
  • Directorul curent de lucru este: / usr / local / Acme / clase / com / Acme / exemplu /

Apoi urmează următoarele scenarii:

# greșit, FQN este necesar java Appuals # greșit, nu există un folder `com / acme / example` în directorul de lucru curent java com.acme.example.Appuals # greșit, similar scenariului de mai sus java -classpath. com.acme.example.Appuals # OK; o cale de clasă relativă este setată java -classpath ../../ .. com.acme.example.Appuals # OK; un drum de clasă absolut este setat java -classpath / usr / local / acme / classes com.acme.example.Appuals

Notă: Classpath trebuie să includă și toate celelalte clase (non-sistem) de care au nevoie aplicațiile dvs.

Soluția 4: Verificarea pachetului clasei

Dacă toate soluțiile de mai sus sunt valabile în cazul dvs., trebuie să vă asigurați că codul sursă este plasat în folderul corect. De asemenea, ați declarat corect pachetul . Dacă rulați codul cu un IDE, acesta vă va informa probabil cu privire la problemă. Cu toate acestea, în cazul nostru, deoarece îl rulăm în promptul de comandă, greșeala va trece neobservată și veți primi eroarea de clasă în discuție.