Tidak Dapat Mencari atau Memuatkan Ralat Kelas Utama

1. Pengenalan

Kadang-kadang ketika kita menjalankan program Java, kita mungkin melihat "Tidak dapat mencari atau memuat kelas utama". Mudah untuk meneka alasannya: JVM gagal menemui kelas utama dan memberikan ralat ini. Tetapi mengapa tidak boleh?

Dalam tutorial ini, kita akan membincangkan kemungkinan sebab kegagalan untuk menemui kelas utama. Juga, kita akan melihat cara memperbaikinya.

2. Contoh Program

Kami akan memulakan dengan program HelloWorld :

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

Sekarang, mari kita susun:

$ javac HelloWorld.java

Di sini, penyusun akan menghasilkan fail .class untuk program kami. Ini .class fail akan dijana dalam direktori yang sama. The .class fail akan mempunyai nama yang sama seperti nama kelas yang diberikan dalam program Jawa. Ini .class fail boleh laksana.

Pada bahagian berikut, kami akan menjalankan fail .class ini dan cuba memahami kemungkinan sebab ralat "Tidak dapat mencari atau memuat kelas utama".

3. Nama Kelas yang Salah

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

java 

Sekarang, mari jalankan program kami:

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

Ya, ia gagal dengan ralat "Tidak dapat mencari atau memuatkan helloworld kelas utama".

Seperti yang telah dibincangkan sebelumnya, pengkompil akan menghasilkan fail .class dengan nama yang sama persis yang diberikan kepada kelas Java dalam program . Jadi dalam kes kami, kelas utama akan mempunyai nama HelloWorld , bukan helloworld .

Mari cuba sekali lagi dengan selongsong yang betul:

$ java HelloWorld Hello world..!!!

Kali ini berjalan dengan jayanya.

3.1. Sambungan fail

Untuk menyusun program Java, kita mesti memberikan nama fail dengan pelanjutannya (. Java ):

$ javac HelloWorld.java

Tetapi untuk menjalankan a. fail kelas , kita perlu memberikan nama kelas, bukan nama fail. Oleh itu, tidak perlu memberikan pelanjutan .class :

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

Jadi, sekali lagi, mari jalankan program kami menggunakan nama kelas yang betul:

$ java HelloWorld Hello world..!!!

4. Nama Pakej Java

Di Java, kami mengumpulkan kelas yang serupa dalam apa yang kami panggil pakej .

Mari pindahkan kelas HelloWorld ke dalam pakej com.baeldung :

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

Sekarang, mari kita menyusun dan menjalankan program HelloWorld yang dikemas kini seperti sebelumnya:

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

Tetapi sekali lagi kita mendapat ralat "Tidak dapat mencari atau memuat kelas utama HelloWorld"!

Mari cuba memahami apa yang kita terlepas di sini.

Untuk menjalankan kelas Java yang ada dalam pakej, kita mesti memberikan nama yang memenuhi syarat . Jadi dalam kes kami, nama HelloWorld yang layak sepenuhnya adalah com.baeldung.HelloWorld .

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

com/baeldung/HelloWorld.java

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

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

Namun, kami tidak dapat menjalankan program kami.

Di sini, semasa kami menentukan nama kelas yang memenuhi syarat com.baeldung.HelloWorld , Java cuba mencari fail HelloWorld.class di com / baeldung , di bawah direktori dari mana kami menjalankan program ini.

Oleh kerana kami sudah berada di dalam com / baeldung , Java gagal mencari dan menjalankan program HelloWorld .

Sekarang, mari kita kembali ke folder induk dan jalankan:

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

Ya, kita sekali lagi dapat mengucapkan "Hello" kepada dunia.

5. Classpath tidak sah

Sebelum meneruskan, mari kita fahami terlebih dahulu apa itu classpath - itu adalah set kelas yang tersedia untuk JVM kami yang sedang berjalan.

Kami menggunakan pemboleh ubah classpath untuk memberitahu JVM di mana hendak mencari fail .class pada sistem fail.

Semasa menjalankan program, kami dapat menyediakan classpath menggunakan pilihan -classpath . contoh:

java -classpath /my_programs/compiled_classes HelloWorld

Di sini, Java akan mencari fail HelloWorld.class dalam folder / my_programs / compiled_classes , folder yang namanya baru kita buat. Secara lalai, pemboleh ubah classpath ditetapkan ke ".", Yang bermaksud direktori semasa.

Di bahagian di atas, kami mengubah direktori kami untuk menjalankan program kami. Tetapi bagaimana jika kita mahu menjalankannya dari beberapa folder lain? Ketika itulah pemboleh ubah classpath membantu kita.

Untuk menjalankan program kami dari direktori adalah com / baeldung kita hanya dapat menyatakan bahawa classpath kami adalah dua direktori - satu untuk setiap bahagian pakej:

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

Di sini, ".." mewakili direktori induk. Dalam kes kami "../../" mewakili bahagian atas hierarki pakej kami.

6. Kesimpulannya

Dalam tutorial ini, kami mengetahui kemungkinan sebab kesalahan tersebut "Tidak dapat mencari atau memuat kelas utama".

Sudah tentu, kami juga belajar bagaimana menyelesaikan kesilapan ini.