Ayusin: Hindi mahanap o mai-load ang pangunahing klase



Subukan Ang Aming Instrumento Para Sa Pagtanggal Ng Mga Problema

Ang error na ‘ Hindi mahanap o mai-load ang pangunahing klase 'Nangyayari kapag gumagamit ng isang utos na java sa prompt ng utos upang maglunsad ng isang programang Java sa pamamagitan ng pagtukoy sa pangalan ng klase sa terminal. Ang dahilan kung bakit nangyari ito ay halos dahil sa pagkakamali sa pagprograma ng gumagamit habang idinideklara ang klase.



Hindi mahanap o mai-load ang pangunahing klase sa linya ng utos ng Java

Hindi mahanap o mai-load ang pangunahing klase- Linya ng utos ng Java



Tulad ng nabanggit dati, ang error na ito ay halos hindi nauugnay sa system at nagkamali ang gumagamit sa maraming mga sitwasyon tulad ng ipinakita sa ibaba. Bago sumulong, ipinapalagay namin na mayroon kang isang pangunahing kaalaman sa wika ng pagprograma ng Java at kung paano ito gumagana.



Ano ang sanhi ng error na 'Hindi mahanap o mai-load ang pangunahing klase' sa Java?

Ang mensaheng 'Hindi mahanap o mai-load ang pangunahing klase' ay nangangahulugan na ang unang hakbang ng engine ng Java na makuha ang klase para sa pagpapatupad ay nabigo. Ang utos ng java hindi nakayang hanapin ang klase sa tamang direktoryo.

Sa ilang mga kaso, kailangan mong idagdag ang tamang landas ng file at ituro ang terminal ng Java sa tamang lokasyon. Dahil ipinatutupad mo ang utos mula sa terminal ng utos ng utos, hindi alam ng computer kung saan matatagpuan ang klase o kung saan ito matatagpuan. Sa mga naka-target na IDE, hindi ito ang problema dahil pinapanatili ng IDE ang isang pointer na nakaturo sa kasalukuyang direktoryo ng pagtatrabaho.

Ano ang syntax ng 'java'?

Bago namin simulan ang pag-troubleshoot kung bakit ang terminal ay nagbabalik sa amin ng isang error kapag sinusubukang ipatupad, kailangan muna naming tingnan ang syntax ng utos. Kung hindi ka gumagamit ng tamang syntax, haharapin mo ang error na ito.



Ang normal na syntax ng utos ay tulad nito:

java [...] [...]

Narito ang isang pagpipilian ng linya ng utos, ay isang ganap na kwalipikadong pangalan ng klase ng Java, at isang argument ng linya ng utos na naipasa sa iyong aplikasyon kapag naipon ang buong package.

Ang isang halimbawa ng isang wastong utos ay:

java -Xmx100m com.acme.example.ListAppuals kevin arrow bart

Ang utos sa itaas ay gagawin ang utos ng java na isagawa ang mga sumusunod na operasyon:

  • Hahanapin nito ang isang naipong bersyon ng klase na ‘ com.acme.example.ListAppuals '.
  • Pagkatapos maghanap, maglo-load ito ng klase.
  • Susunod, kapag na-load ang klase, hahanapin ang klase para sa isang 'pangunahing' pamamaraan na may wastong lagda, modifier, at uri ng pagbabalik. Ang isang sample na pangunahing klase ay magiging tulad ng:
pampublikong static void main (String [])
  • Tatawagan ang pamamaraan na may mga argument na 'kevin', 'arrow', at 'bart' bilang string [].

Paano Ayusin ang 'Hindi mahanap o mai-load ang pangunahing klase'

Solusyon 1: Sinusuri ang argumento ng pangalan ng klase

Ang pinakakaraniwang pagkakamali na nagagawa ng mga gumagamit ay ang pagbibigay nila ng maling pangalan ng klase bilang isang pagtatalo (o ang isang tamang pangalan ng klase ay isang maling form). Dahil idinideklara namin ang mga parameter sa linya ng utos, malamang na maipasa mo ang argumento ng pangalan ng klase sa isang maling form. Dito namin ililista ang lahat ng mga posibleng sitwasyon kung saan maaari kang magkamali.

  • Pagsulat a simpleng pangalan ng klase . Kung ideklara mo ang klase sa isang pakete tulad ng 'com.acme.example', dapat mong gamitin ang buong classname kasama ang package sa utos ng Java.
java com.acme.example.ListAppuals

sa halip na

java ListAppuals
  • Dapat mo magdeklara ng isang classname sa halip na magdeklara ng isang filename o pathname. Hindi nakuha ng Java ang klase kung magdeklara ka ng isang pathname / filename para dito. Hindi tama Kasama sa mga entry ang sumusunod:
java ListAppuals.class java com / acme / halimbawa / ListAppuals.class
  • Casing dapat isaalang-alang. Ang mga utos ng Java ay sensitibo sa kaso at kung nagkamali ka ng kahit isang letra, hindi mo mai-load ang pangunahing klase. Isang halimbawa ng mga maling pagkakamali ay:
java com.acme.example.listappuals
  • Ikaw hindi dapat ideklara kay pinagmulang filename . Tulad ng nabanggit dati, kailangan mo lamang ideklara ang klase sa tamang buong format ng classname. Halimbawa ng isang pagkakamali ay:
java ListAppuals.java
  • Magaganap din ang error na ito kung gumawa ka ng isang kamalian sa pagtype o kalimutan na isulat ang pangalan ng klase nang buo .

Kung nakagawa ka ng anumang mga palpak na pagkakamali sa pagdedeklara ng classname, tiyaking ayusin mo ito at pagkatapos ay subukang ilunsad ang programa.

Solusyon 2: Sinusuri ang classpath

Kung naideklara mo nang tama ang classname ngunit ipinakita pa rin ang error, malamang na hindi mahanap ng utos ng java ang tinukoy na classname sa path. Ang classpath ay isang landas kung saan naghahanap ang Java runtime ng mga mapagkukunan at mga file ng klase. Madali mong maitatakda ang classpath gamit ang dalawang magkakaibang mga utos tulad ng ipinakita sa ibaba:

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

Upang makakuha ng higit pang pananaw tungkol sa classpath, dapat mong suriin ang mga sumusunod na dokumento.

Dokumentasyon ng utos ng Java

Pagtatakda ng classpath

Solusyon 3: Suriin ang direktoryo

Kapag idineklara mo ang isang direktoryo bilang isang classpath, palagi itong tumutugma sa ugat ng namespace. Halimbawa kung ang '/ usr / local / acme / klase' ay nasa classpath, pagkatapos ay maghanap ang Java para sa isang klase na 'com.acme.example.Appuals'. Maghahanap ito para sa isang klase na may sumusunod na pathname:

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

Kaya't sa esensya, kung inilagay mo ang sumusunod na address sa classpath, hindi mahanap ng Java ang klase:

/ usr / local / acme / klase / com / acme / halimbawa

Dapat mo ring suriin ang iyong subdirectory at tingnan kung tumutugma ito sa FQN. Kung ang iyong mga klase sa FQN ay 'com.acme.example.Appuals', pagkatapos ay maghanap ang Java para sa isang 'Appuals.class' sa direktoryo na 'com / acme / halimbawa'.

Upang mabigyan ka ng isang halimbawa, ipagpalagay nating ang sumusunod na senaryo:

  • Ang klase na nais mong patakbuhin ay: com.acme.example.Adwal
  • Ang buong file path ay: /usr/local/acme/class/com/acme/example/Appuals.class
  • Ang kasalukuyang direktoryo ng pagtatrabaho ay: / usr / local / acme / klase / com / acme / halimbawa /

Pagkatapos ang mga sumusunod na senaryo ay hahawak:

# mali, FQN ay kinakailangan ng java Appuals # mali, walang folder na `com / acme / halimbawa` sa kasalukuyang gumaganang direktoryo ng java com.acme.example. com.acme.example.Adwal # OK; ang isang kamag-anak na klase ay nakatakda sa java -classpath ../../ .. com.acme.example.Appuals # OK; ang isang ganap na classpath ay itinakda java -classpath / usr / local / acme / mga klase com.acme.example.Appuals

Tandaan: Kailangan ding isama ng classpath ang lahat ng iba pang mga klase (hindi system) na kinakailangan ng iyong mga application.

Solusyon 4: Suriin ang package ng klase

Kung ang lahat ng mga solusyon sa itaas ay totoo sa iyong kaso, kailangan mong tiyakin na ang iyong source code ay nakalagay sa tamang folder. Gayundin, naideklara mong tama ang pakete . Kung pinatakbo mo ang iyong code gamit ang isang IDE, malamang na ipaalam ito sa iyo tungkol sa isyu. Gayunpaman, sa aming kaso, dahil pinatakbo namin ito sa command prompt, ang pagkakamali ay hindi napapansin at makukuha mo ang error sa klase sa ilalim ng talakayan.

Basahin ang 4 na minuto