Betulkan: Tidak dapat mencari atau memuatkan kelas utama

Kesalahan ' Tidak dapat mencari atau memuat kelas utama ' berlaku semasa menggunakan perintah java di command prompt untuk melancarkan program Java dengan menentukan nama kelas di terminal. Sebab mengapa ini berlaku kebanyakannya disebabkan oleh kesalahan pengaturcaraan pengguna semasa mengisytiharkan kelas.

Tidak dapat mencari atau memuat kelas utama di baris perintah Java

Seperti yang disebutkan sebelumnya, kesalahan ini kebanyakannya tidak berkaitan dengan sistem dan pengguna melakukan kesalahan dalam beberapa senario seperti yang ditunjukkan di bawah. Sebelum melangkah ke hadapan, kami menganggap bahawa anda mempunyai pengetahuan asas mengenai bahasa pengaturcaraan Java dan cara kerjanya.

Apa yang menyebabkan ralat 'Tidak dapat mencari atau memuat kelas utama' di Java?

Mesej 'Tidak dapat mencari atau memuat kelas utama' bermaksud bahawa langkah pertama mesin Java mengambil kelas untuk pelaksanaan telah gagal. The arahan java tidak dapat mengesan kelas pada direktori yang betul.

Dalam beberapa kes, anda harus menambahkan jalur fail yang betul dan arahkan terminal Java ke lokasi yang betul. Oleh kerana anda menjalankan perintah dari terminal baris perintah, komputer tidak tahu di mana kelas akan dijumpai atau di mana ia berada. Dalam IDE yang disasarkan, ini bukan masalahnya kerana IDE terus menunjukkan penunjuk ke arah direktori yang berfungsi sekarang.

Apa itu sintaks 'java'?

Sebelum kita memulakan penyelesaian masalah mengapa terminal mengembalikan kesalahan kepada kita ketika cuba melaksanakannya, pertama kita perlu melihat sintaks perintah. Sekiranya anda tidak menggunakan sintaks yang betul, anda pasti akan menghadapi ralat ini.

Sintaks biasa perintah adalah seperti ini:

 java [...] [...]

Berikut adalah pilihan baris perintah, adalah nama kelas Java yang berkelayakan sepenuhnya, dan merupakan argumen baris perintah yang diteruskan ke aplikasi anda ketika keseluruhan paket disusun.

Contoh arahan yang sah adalah:

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

Perintah di atas akan membuat perintah java melaksanakan operasi berikut:

  • Ia akan mencari versi kompilasi kelas ' com.acme.example.ListAppuals '.
  • Setelah mencari, ia akan memuatkan kelas.
  • Seterusnya, apabila kelas dimuat, kelas akan dicari kaedah 'utama' dengan tandatangan, pengubah, dan jenis pengembalian yang sah. Contoh kelas utama adalah seperti:
kekosongan statik awam utama
  • Kaedah ini akan dipanggil dengan argumen 'kevin', 'panah', dan 'bart' sebagai rentetan [].

Cara Memperbaiki 'Tidak dapat mencari atau memuat kelas utama'

Penyelesaian 1: Memeriksa hujah nama kelas

Kesalahan yang paling biasa dilakukan oleh pengguna ialah mereka memberikan nama kelas yang salah sebagai argumen (atau nama kelas yang betul adalah bentuk yang salah). Oleh kerana kami menyatakan parameter pada baris perintah, kemungkinan besar anda akan menyampaikan argumen nama kelas dalam bentuk yang salah. Di sini kami akan menyenaraikan semua kemungkinan senario di mana anda boleh membuat kesilapan.

  • Menulis nama kelas sederhana . Sekiranya anda menyatakan kelas dalam pakej seperti 'com.acme.example', anda mesti menggunakan nama kelas penuh termasuk pakej dalam perintah Java.
java com.acme.example.ListAppuals

bukannya

Daftar Aplikasi Java
  • Anda harus menyatakan nama kelas dan bukannya menyatakan nama fail atau nama jalan. Java tidak mengambil kelas jika anda menyatakan nama jalan / nama fail untuknya. Penyertaan yang salah merangkumi yang berikut:
java ListAppuals.class java com / acme / example / ListAppuals.class
  • Selongsong harus diambil kira. Perintah Java peka huruf besar kecil dan jika anda membuat kesalahan walaupun satu huruf, anda tidak akan dapat memuat kelas utama. Contoh kesalahan yang tidak betul adalah:
java com.acme.example.listappuals
  • Anda tidak boleh menyatakan nama fail sumber . Seperti yang dinyatakan sebelum ini, anda hanya perlu menyatakan kelas dalam format nama kelas penuh yang betul. Contoh kesalahan adalah:
java ListAppuals.java
  • Kesalahan ini juga akan berlaku sekiranya anda melakukan kesalahan menaip atau lupa menulis nama kelas sepenuhnya .

Sekiranya anda membuat kesilapan dalam menyatakan nama kelas, pastikan anda memperbaikinya dan kemudian cuba melancarkan program.

Penyelesaian 2: Memeriksa jalan kelas

Sekiranya anda telah menyatakan nama kelas dengan betul tetapi masih ditunjukkan ralatnya, kemungkinan perintah java tidak dapat menemukan nama kelas yang ditentukan di jalan tersebut. Classpath adalah jalan di mana Java runtime mencari sumber dan fail kelas. Anda boleh mengatur classpath dengan mudah menggunakan dua arahan yang berbeza seperti yang ditunjukkan di bawah:

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

Untuk mendapatkan lebih banyak pandangan mengenai jalan kelas, anda harus melihat dokumen berikut.

Dokumentasi arahan Java

Menetapkan jalan kelas

Penyelesaian 3: Memeriksa direktori

Apabila anda mengisytiharkan direktori sebagai classpath, direktori akan selalu sesuai dengan akar ruang nama. Contohnya jika "/ usr / local / acme / class" ada di classpath, maka Java akan mencari kelas "com.acme.example.Appuals". Ia akan mencari kelas dengan nama jalan berikut:

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

So in essence, if you put the following address in the classpath, Java will not be able to find the class:

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

You should also check your subdirectory and see if it matches the FQN. If your classes FQN is “com.acme.example.Appuals”, then Java will search for an “Appuals.class” in the directory “com/acme/example”.

To give you an example, let’s suppose the following scenario:

  • The class you want to run is: com.acme.example.Appuals
  • The full file path is: /usr/local/acme/classes/com/acme/example/Appuals.class
  • The current working directory is: /usr/local/acme/classes/com/acme/example/

Then the following scenarios would hold:

# wrong, FQN is needed java Appuals # wrong, there is no `com/acme/example` folder in the current working directory java com.acme.example.Appuals # wrong, similar to above scenario java -classpath . com.acme.example.Appuals # OK ; a relative classpath is set java -classpath ../../.. com.acme.example.Appuals # OK; an absolute classpath is set java -classpath /usr/local/acme/classes com.acme.example.Appuals

Note: The classpath needs to also include all the other classes (non-system) which your applications needs.

Solution 4: Checking class package

Sekiranya semua penyelesaian di atas berlaku dalam kes anda, anda perlu memastikan bahawa kod sumber anda diletakkan di folder yang betul. Anda juga telah menyatakan pakej dengan betul . Sekiranya anda menjalankan kod anda dengan IDE, mungkin akan memberitahu anda mengenai masalahnya. Walau bagaimanapun, dalam kes kami, kerana kami menjalankannya dalam command prompt, kesalahan akan disedari dan anda akan mendapat ralat kelas yang sedang dibincangkan.