Tidak Dapat Menemukan atau Memuat Kesalahan Kelas Utama

1. Perkenalan

Terkadang ketika kita menjalankan program Java, kita mungkin melihat “Tidak dapat menemukan atau memuat kelas utama”. Sangat mudah untuk menebak alasannya: JVM gagal menemukan kelas utama dan memberikan kesalahan ini. Tapi kenapa tidak?

Dalam tutorial ini, kita akan membahas kemungkinan alasan kegagalan menemukan kelas utama. Juga, kita akan melihat cara memperbaikinya.

2. Program Contoh

Kami akan mulai dengan program HelloWorld :

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world..!!!"); } }

Sekarang, mari kita kompilasi:

$ javac HelloWorld.java

Di sini, kompilator akan menghasilkan file .class untuk program kita. File .class ini akan dibuat di direktori yang sama. File .class akan memiliki nama yang sama dengan nama kelas yang diberikan dalam program Java. Ini .class file executable.

Di bagian berikut, kita akan menjalankan file .class ini dan mencoba memahami kemungkinan penyebab kesalahan "Tidak dapat menemukan atau memuat kelas utama".

3. Nama Kelas Salah

Untuk menjalankan file .class yang dihasilkan oleh compiler Java, kita dapat menggunakan perintah di bawah ini:

java 

Sekarang, mari kita jalankan program kita:

$ java helloworld Error: Could not find or load main class helloworld

Ya, itu gagal dengan kesalahan "Tidak dapat menemukan atau memuat helloworld kelas utama".

Seperti yang telah dibahas sebelumnya, kompilator akan menghasilkan file .class dengan nama yang sama persis dengan yang diberikan ke kelas Java dalam program tersebut . Jadi dalam kasus kami, kelas utama akan memiliki nama HelloWorld , bukan helloworld .

Mari kita coba sekali lagi dengan casing yang benar:

$ java HelloWorld Hello world..!!!

Kali ini berjalan dengan sukses.

3.1. Ekstensi File

Untuk mengkompilasi program Java, kita harus memberikan nama file dengan ekstensi (. Java ):

$ javac HelloWorld.java

Tapi untuk menjalankan file. file kelas , kita perlu memberikan nama kelas, bukan nama file. Jadi tidak perlu menyediakan ekstensi .class :

$ java HelloWorld.class Error: Could not find or load main class HelloWorld.class

Jadi, sekali lagi, mari kita jalankan program kita menggunakan nama kelas yang benar:

$ java HelloWorld Hello world..!!!

4. Nama Paket Java

Di Java, kami menyatukan kelas yang serupa dalam apa yang kami sebut paket .

Mari pindahkan kelas HelloWorld ke dalam paket com.baeldung :

package com.baeldung; public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world..!!!"); } }

Sekarang, mari kita kompilasi dan jalankan program HelloWorld yang diperbarui seperti sebelumnya:

$ java HelloWorld Error: Could not find or load main class HelloWorld

Tapi sekali lagi kami mendapatkan kesalahan "Tidak dapat menemukan atau memuat HelloWorld kelas utama"!

Mari kita coba memahami apa yang kita lewatkan di sini.

Untuk menjalankan kelas Java yang ada di dalam sebuah paket, kita harus memberikan nama yang sepenuhnya memenuhi syarat . Jadi dalam kasus kami, nama yang sepenuhnya memenuhi syarat HelloWorld adalah com.baeldung.HelloWorld .

Sekarang, ketika kami membuat paket com.baeldung , kami sebenarnya membuat struktur folder seperti:

com/baeldung/HelloWorld.java

Pertama, coba jalankan program kita dari direktori com / baeldung :

$ java com.baeldung.HelloWorld Error: Could not find or load main class com.baeldung.HelloWorld

Tetap saja, kami tidak dapat menjalankan program kami.

Di sini, ketika kami menentukan nama kelas yang memenuhi syarat com.baeldung.HelloWorld , Java mencoba mencari file HelloWorld.class di com / baeldung , di bawah direktori tempat kami menjalankan program.

Karena kita sudah berada di dalam com / baeldung , Java gagal menemukan dan menjalankan program HelloWorld .

Sekarang, mari kembali ke folder induk dan menjalankannya:

$ java com.baeldung.HelloWorld Hello world..!!!

Ya, kita bisa kembali mengucapkan "Halo" kepada dunia.

5. Jalur Kelas Tidak Valid

Sebelum melanjutkan, pertama-tama mari kita pahami apa itu classpath - itu adalah kumpulan kelas yang tersedia untuk JVM kita yang saat ini berjalan.

Kami menggunakan variabel classpath untuk memberi tahu JVM di mana menemukan file .class pada sistem file.

Saat menjalankan program, kita bisa menyediakan classpath menggunakan opsi -classpath . contoh:

java -classpath /my_programs/compiled_classes HelloWorld

Disini Java akan mencari file HelloWorld.class di folder / my_programs / compiled_classes , folder yang namanya baru saja kita buat. Secara default, variabel classpath disetel ke ".", Yang berarti direktori saat ini.

Di bagian atas, kami mengubah direktori kami untuk menjalankan program kami. Tetapi bagaimana jika kita ingin menjalankannya dari folder lain? Saat itulah variabel classpath membantu kita.

Untuk menjalankan program kita dari direktori com / baeldung, kita cukup menyatakan bahwa classpath kita adalah dua direktori - satu untuk setiap bagian paket:

$ java -claspath ../../ com.baeldung.HelloWorld Hello world..!!!

Di sini, ".." mewakili direktori induk. Dalam kasus kami "../../" mewakili bagian atas hierarki paket kami.

6. Kesimpulan

Dalam tutorial ini, kami mempelajari kemungkinan alasan kesalahan "Tidak dapat menemukan atau memuat kelas utama".

Kemudian, tentunya kita juga belajar bagaimana mengatasi kesalahan ini.