Saya memiliki kelas java yang dikompilasi:
Echo.class
public class Echo {
public static void main (String arg) {
System.out.println(arg);
}
}
I cd
ke direktori dan masukkan:java Echo "hello"
Saya mendapatkan kesalahan ini:
C:\Documents and Settings\joe\My Documents\projects\Misc\bin>java Echo "hello"
Exception in thread "main" java.lang.NoClassDefFoundError: Echo
Caused by: java.lang.ClassNotFoundException: Echo
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not find the main class: Echo. Program will exit.
Apa cara termudah untuk mendapatkan kode java saya dalam bentuk yang dapat saya jalankan dari baris perintah sebagaimana seharusnya menggunakan Eclipse IDE?
Jawaban:
Mencoba:
Dengan asumsi Anda mengkompilasi dengan:
Kemudian ada kemungkinan direktori "saat ini" tidak ada di classpath Anda (di mana java mencari definisi .class)
Jika itu masalahnya dan daftar isi direktori Anda ditampilkan:
Maka salah satu dari ini mungkin berhasil:
atau
Dan nanti seperti yang ditunjukkan Fredrik, Anda akan mendapatkan pesan kesalahan lain seperti.
Ketika itu terjadi, pergi dan baca jawabannya :)
sumber
Anda perlu menentukan jalur kelas. Ini harus melakukannya:
Ini memberitahu java untuk menggunakan
.
(direktori saat ini) sebagai jalur kelasnya, yaitu tempat di mana ia mencari kelas. Catatan daripada saat Anda menggunakan paket, classpath harus berisi direktori root, bukan subdirektori paket. misalnya jika kelas Anda adalahmy.package.Echo
dan file .class adalahbin/my/package/Echo.class
, direktori classpath yang benar adalahbin
.sumber
Anda tidak memiliki metode utama yang valid ... Tanda tangan harus: public static void main ( String [] args);
Karenanya, dalam kasus Anda, kodenya akan terlihat seperti ini:
Sunting: Harap dicatat bahwa Oscar juga benar bahwa Anda hilang. di jalur kelas Anda, Anda akan mengalami masalah yang saya selesaikan setelah Anda menangani kesalahan itu.
sumber
Dengan Java 11 Anda tidak perlu melalui omong kosong ini lagi!
Sebagai gantinya, Anda dapat melakukan ini:
Anda tidak perlu mengompilasi terlebih dahulu, karena semuanya dilakukan dalam satu langkah.
Anda bisa mendapatkan Java 11 JDK di sini: JDK 11 GA Release
sumber
Jika ada di sumber java Anda
dan kelas Anda adalah hello.java dengan
dan di hello.java yang Anda miliki
Kemudian (setelah kompilasi) changeDir (cd) ke direktori tempat hello.class Anda berada. Kemudian
Perhatikan direktori saat ini dan nama paket sebelum nama kelas. Ia bekerja untuk saya di linux mint dan saya berharap di os lain juga
Terima kasih Stack overflow untuk banyak info.
sumber
./mypackage/hello.class
nama. Lihat juga: pertanyaan " Menjalankan java dalam paket dari baris perintah ".Situasi saya sedikit rumit. Saya harus melakukan tiga langkah karena saya menggunakan .dll di direktori sumber daya, untuk kode JNI. File saya dulu
Kode saya berisi baris berikut
Pertama, saya harus pindah ke direktori classpath
Selanjutnya, saya harus mengubah classpath untuk menunjuk ke direktori saat ini sehingga kelas saya akan dimuat dan saya harus mengubah classpath untuk menunjuk ke direktori sumber daya sehingga dll saya akan dimuat.
Kemudian, saya harus menjalankan java menggunakan nama kelas.
sumber
Pertama, sudahkah Anda mengkompilasi kelas menggunakan baris perintah javac compiler? Kedua, tampaknya metode utama Anda memiliki tanda tangan yang salah - metode ini harus menggunakan array objek String, bukan hanya satu:
Setelah Anda mengubah kode Anda untuk mengambil array objek String, maka Anda perlu memastikan bahwa Anda mencetak elemen dari array, bukan array itu sendiri:
Jika Anda ingin mencetak seluruh daftar argumen baris perintah, Anda perlu menggunakan perulangan, mis
sumber