Fix: Tidak dapat menemukan atau memuat kelas utama

Kesalahan ' Tidak dapat menemukan atau memuat kelas utama ' terjadi saat menggunakan perintah java di prompt perintah untuk meluncurkan program Java dengan menentukan nama kelas di terminal. Alasan mengapa ini terjadi sebagian besar karena kesalahan pemrograman pengguna saat mendeklarasikan kelas.

Tidak dapat menemukan atau memuat kelas utama di baris perintah Java

Seperti disebutkan sebelumnya, kesalahan ini sebagian besar tidak terkait dengan sistem dan pengguna membuat kesalahan dalam beberapa skenario seperti yang ditunjukkan di bawah ini. Sebelum melangkah maju, kami berasumsi bahwa Anda memiliki pengetahuan dasar tentang bahasa pemrograman Java dan cara kerjanya.

Apa yang menyebabkan kesalahan 'Tidak dapat menemukan atau memuat kelas utama' di Java?

Pesan 'Tidak dapat menemukan atau memuat kelas utama' berarti langkah pertama mesin Java yang mengambil kelas untuk dieksekusi telah gagal. The perintah java tidak dapat menemukan kelas di direktori yang benar.

Dalam beberapa kasus, Anda harus menambahkan jalur file yang benar dan mengarahkan terminal Java ke lokasi yang benar. Karena Anda menjalankan perintah dari terminal baris perintah, komputer tidak tahu di mana kelas itu akan ditemukan atau di mana lokasinya. Di IDE yang ditargetkan, ini bukan masalah karena IDE menyimpan pointer yang mengarah ke direktori kerja saat ini.

Apa itu sintaks 'java'?

Sebelum kita mulai memecahkan masalah mengapa terminal mengembalikan kita kesalahan saat mencoba mengeksekusi, pertama kita perlu melihat sintaks perintah. Jika Anda tidak menggunakan sintaks yang benar, Anda pasti akan menghadapi kesalahan ini.

Sintaks normal perintah adalah seperti ini:

 java [...] [...]

Berikut adalah opsi baris perintah, adalah nama kelas Java yang memenuhi syarat, dan merupakan argumen baris perintah yang diteruskan ke aplikasi Anda ketika seluruh paket dikompilasi.

Contoh dari perintah yang valid adalah:

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

Perintah di atas akan membuat perintah java menjalankan operasi berikut:

  • Ini akan mencari versi terkompilasi dari kelas ' com.acme.example.ListAppuals '.
  • Setelah dicari, kelas akan dimuat.
  • Selanjutnya, saat kelas dimuat, kelas akan mencari metode 'utama' dengan tanda tangan, pengubah, dan tipe kembalian yang valid. Contoh kelas utama akan menjadi seperti ini:
public static void main (String [])
  • Metode tersebut akan dipanggil dengan argumen 'kevin', 'arrows', dan 'bart' sebagai string [].

Cara Memperbaiki 'Tidak dapat menemukan atau memuat kelas utama'

Solusi 1: Memeriksa argumen nama kelas

Kesalahan paling umum yang dilakukan pengguna adalah mereka memberikan nama kelas yang salah sebagai argumen (atau nama kelas yang benar adalah bentuk yang salah). Karena kami mendeklarasikan parameter pada baris perintah, kemungkinan besar Anda akan meneruskan argumen nama kelas dalam bentuk yang salah. Di sini kami akan membuat daftar semua kemungkinan skenario di mana Anda bisa membuat kesalahan.

  • Menulis nama kelas yang sederhana . Jika Anda mendeklarasikan kelas dalam paket seperti 'com.acme.example', Anda harus menggunakan nama kelas lengkap termasuk paket dalam perintah Java.
java com.acme.example.ListAppuals

dari pada

java ListAppuals
  • Anda harus mendeklarasikan nama kelas daripada mendeklarasikan nama file atau nama jalur. Java tidak mengambil kelas jika Anda mendeklarasikan nama jalur / nama file untuknya. Entri yang salah meliputi berikut ini:
java ListAppuals.class java com / acme / example / ListAppuals.class
  • Casing harus dipertimbangkan. Perintah Java peka huruf besar dan kecil dan jika Anda membuat kesalahan bahkan satu huruf, Anda tidak akan dapat memuat kelas utama. Contoh kesalahan yang salah adalah:
java com.acme.example.listappuals
  • Anda tidak boleh mendeklarasikan nama file sumber . Seperti yang disebutkan sebelumnya, Anda hanya perlu mendeklarasikan kelas dalam format nama kelas lengkap yang benar. Contoh kesalahan adalah:
java ListAppuals.java
  • Kesalahan ini juga akan terjadi jika Anda melakukan kesalahan pengetikan atau lupa menulis nama kelas seluruhnya .

Jika Anda membuat kesalahan sembarangan dalam mendeklarasikan nama kelas, pastikan Anda memperbaikinya dan kemudian coba meluncurkan program.

Solusi 2: Memeriksa classpath

Jika Anda telah mendeklarasikan nama kelas dengan benar tetapi masih menunjukkan kesalahan, kemungkinan besar perintah java tidak dapat menemukan nama kelas yang ditentukan di jalur. Classpath adalah jalur tempat runtime Java mencari resource dan file kelas. Anda dapat dengan mudah mengatur classpath menggunakan dua perintah berbeda seperti yang ditunjukkan di bawah ini:

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

Untuk mendapatkan lebih banyak wawasan tentang classpath, Anda harus memeriksa dokumen berikut.

Dokumentasi perintah Java

Menyetel jalur kelas

Solusi 3: Memeriksa direktori

Saat Anda mendeklarasikan direktori sebagai classpath, itu akan selalu sesuai dengan root namespace. Misalnya jika "/ usr / local / acme / class" ada di jalur kelas, maka Java akan mencari kelas "com.acme.example.Appuals". Ini akan mencari kelas dengan nama jalur 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

Jika semua solusi di atas benar dalam kasus Anda, Anda perlu memastikan bahwa kode sumber Anda ditempatkan di folder yang benar. Juga, Anda telah mendeklarasikan paket dengan benar . Jika Anda menjalankan kode Anda dengan IDE, itu mungkin akan memberi tahu Anda tentang masalah tersebut. Namun, dalam kasus kami, karena kami menjalankannya di command prompt, kesalahan tidak akan diketahui dan Anda akan mendapatkan kesalahan kelas yang sedang dibahas.