Lebih
Error: tidak Dapat menemukan atau beban utama kelas
Saya mengalami kesulitan dalam menyusun dan menjalankan kode Java, dimaksudkan untuk memungkinkan saya untuk antarmuka Jawa dengan objek bersama untuk Vensim, simulasi pemodelan paket.
Kode berikut mengkompilasi tanpa kesalahan:
javac -d . -cp ./apache-log4j-1.2.16/log4j-1.2.16.jar:./vensim.jar SpatialModel.java VensimHelper.java VensimException.java VensimContextRepository.java
Namun, ketika saya mencoba untuk menjalankan hal berikut:
java -cp ./apache-log4j-1.2.16/log4j-1.2.16.jar:./vensim.jar SpatialModel vars
Saya mendapatkan error berikut: "Kesalahan: tidak Dapat menemukan atau beban utama kelas SpatialModel ". Saya SpatialModel.java kode tidak mengandung 'utama' metode (di bawah), jadi saya'm tidak yakin apa masalahnya - ada yang bisa tolong bantu saya keluar? Terima kasih.
import java.io.File;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.log4j.Logger;
public class SpatialModel {
private VensimHelper vh;
public static final String DLL_LIBNAME_PARAM = "vensim_lib_nam";
public static final String MODEL_PATH_PARAM = "vensim_model_path";
private final static int VENSIM_CONTEXT_CREATION_MAX_FAILURE_COUNT = 10;
public SpatialModel() throws SpatialException {
String libName = System.getProperty(DLL_LIBNAME_PARAM);
String modelPath = System.getProperty(MODEL_PATH_PARAM);
if(libName == null || libName.trim().equals("")) {
log.error("Vensim library name has to be set with -D" + DLL_LIBNAME_PARAM);
throw new SpatialException("Vensim library name has to be set with -D" + DLL_LIBNAME_PARAM);
}
if(modelPath == null || modelPath.trim().equals("")) {
log.error("Model path has to set with -D" + MODEL_PATH_PARAM);
throw new SpatialException("Model path ahs to be set with -D" + MODEL_PATH_PARAM);
}
for (int i = 0; i < VENSIM_CONTEXT_CREATION_MAX_FAILURE_COUNT && vh == null; i++) {
try {
log.info("creating new vensim helper\n\tdll lib: " + libName + "\n\tmodel path: " + modelPath);
vh = new VensimHelper(libName, modelPath);
} catch (Throwable e) {
log.error("An exception was thrown when initializing Vensim, try: " + i, e);
}
}
if (vh == null) {
throw new SpatialException("Can't initialize Vensim");
}
}
public static void main(String[] args) throws VensimException {
long before = System.currentTimeMillis();
String libName = System.getProperty(DLL_LIBNAME_PARAM);
String modelPath = System.getProperty(MODEL_PATH_PARAM);
if (libName == null) {
libName = "libvensim";
}
if(modelPath == null) {
modelPath = "~/BassModel.vmf";
}
System.setProperty(DLL_LIBNAME_PARAM, libName);
System.setProperty(MODEL_PATH_PARAM, modelPath);
if (args.length > 0 && args[0].equals("info")) {
System.out.println(new VensimHelper(libName, modelPath).getVensimInfo());
} else if (args.length > 0 && args[0].equals("vars")) {
VensimHelper helper = new VensimHelper(libName, modelPath);
String[] vars = helper.getVariables();
for (String var : vars) {
System.out.println(helper.getVariableInfo(var));
}
} else {
File f = new File(".");
System.out.println(f.getAbsolutePath());
SpatialModel sm = new SpatialModel();
}
System.out.println("Execution time: " + (System.currentTimeMillis() - before));
}
}
344
22
Anda harus memastikan bahwa anda menambahkan lokasi anda
.kelas
file untuk anda classpath. Jadi, jika dalam folder saat ini, tambah.
ke classpath anda. Perhatikan bahwa Windows pemisah classpath adalah semi-colon, yaitu a;
.Jika kelas dalam paket
Kemudian memanggil:
hasil di
Error: tidak Dapat menemukan atau beban utama kelas TheClassName
. Hal ini karena itu harus disebut dengan fully-qualified name:Dan ini
thepackagename
direktori harus ada dalam classpath. Dalam contoh ini,.
, arti direktori saat ini, adalah keseluruhan dari classpath. Oleh karena itu contoh khusus ini harus dipanggil dari direktori di manathepackagename
ada.Untuk menjadi jelas, nama kelas ini tidak
TheClassName
, It'sthepackagename.TheClassName
. Mencoba untuk mengeksekusiTheClassName
tidak bekerja, karena tidak ada kelas yang memiliki nama itu ada*. Tidak pada saat ini classpath pula.Akhirnya, perhatikan bahwa dikompilasi (.kelas) versi dijalankan, bukan kode sumber (.jawa) versi. Oleh karena itu "CLASSPATH."
Anda dapat mencoba kedua ketika anda mendapatkan pesan kesalahan: 'bisa tidak menemukan atau beban utama kelas'
Jika kelas anda file ini disimpan di direktori berikut dengan
HelloWorld
nama programd:\sample
java -cp d:\sample HelloWorld
java -cp . HelloWorld
Saya percaya anda perlu menambahkan direktori saat ini ke classpath Java
Anda harus menyertakan classpath untuk anda javac dan java perintah
misalkan anda memiliki berikut
Paket Bernama: com.tes Nama kelas: Hello (Yang utama) file ini terletak di dalam "src/com/tes/Halo.jawa"
dari luar direktori:
Jika anda bekerja di Eclipse, hanya membuat pembersihan (
proyek\bersih..
bersihsemua
proyek-proyek) proyek.Anda harus mengatur classpath jika anda mendapatkan error:
Misalnya:
Aku punya kesalahan ini karena saya mencoba untuk menjalankan
ketika aku harus dihapus
.kelas
:Periksa
BuildPath
, bisa jadi yang anda referensi perpustakaan yang tidak ada lagi.Jika anda're mendapatkan kesalahan ini dan anda menggunakan Maven untuk membangun Botol, maka ada kesempatan baik bahwa anda hanya tidak memiliki Jawa kelas di
src/main/java/
.Dalam kasus saya saya membuat project di Eclipse default
src
(bukansrc/main/java/
.Jadi saya berakhir dengan sesuatu seperti
mypackage.morepackage.myclass
dan struktur direktori sepertisrc/mypackage/morepackage/myclass
, yang secara inheren tidak ada yang salah. Tapi ketika anda menjalankanmvn clean install
itu akan mencarisrc/main/java/mypackage/morepackage/myclass
. Itu tidak akan menemukan hotel ini, tapi itu tidak't kesalahan baik. Jadi itu akan berhasil membangun dan anda ketika anda menjalankan anda dikeluarkan Jar hasilnya adalah:Karena itu hanya tidak termasuk kelas anda dalam kemasan Botol.
Jika anda mencoba untuk menjalankan aplikasi java yang membutuhkan JDK 1.6 dan anda mencoba untuk berjalan pada JDK 1.4, anda akan menemukan kesalahan ini. Secara umum, mencoba untuk menjalankan aplikasi Java di old JRE mungkin gagal. Cobalah menginstal baru JRE/JDK.
Aku tahu pertanyaan ini ditandai dengan linux, tapi pada windows, anda mungkin perlu untuk memisahkan cp args dengan
;
alih-alih:
.java -cp ./apache-log4j-1.2.16/log4j-1.2.16.jar;./vensim.jar SpatialModel vars
http://docs.oracle.com/javase/7/docs/technotes/tools/windows/classpath.html
Proyek > Bersih dan kemudian pastikan BuildPath > Perpustakaan telah benar Perpustakaan.
jawa -verbose:kelas HelloWorld
mungkin bisa membantu anda memahami mana kelas-kelas yang sedang dimuat.Juga, seperti yang disebutkan sebelumnya, ingat untuk memanggil nama lengkap berkualitas (yaitu termasuk paket).
Masalahnya bukan tentang fungsi utama anda. Check out untuk
output dan menjalankannya.
Saya menggunakan Java 1.8, dan kesalahan ini tiba-tiba terjadi ketika saya menekan "Membangun dan membersihkan" dalam NetBeans. Saya beralih sejenak ke 1.7 lagi, diklik OK, kembali dibuka sifat dan beralih kembali ke 1.8, dan semuanya bekerja dengan sempurna.
Saya harap saya bisa membantu seseorang keluar dengan ini, karena kesalahan ini bisa sangat memakan waktu.
Masalah ini terjadi bagi saya ketika saya impor yang sudah ada proyek ke dalam eclipse. Apa yang terjadi itu adalah menyalin semua file tidak dalam paket, tapi di luar paket. Oleh karena itu, ketika saya mencoba menjalankan > jalankan konfigurasi, itu tidak't menemukan metode utama karena itu tidak dalam paket. Semua yang saya lakukan adalah menyalin file ke dalam paket dan Gerhana itu kemudian mampu mendeteksi metode utama. Sehingga pada akhirnya memastikan bahwa Gerhana dapat menemukan metode utama anda, dengan memastikan bahwa anda file java di paket yang tepat.
Jika begitu sederhana daripada banyak orang berpikir, termasuk saya :)
cd untuk
Proyek Folder/src/paket
di sana anda akan melihat yourClass.java kemudian jalankanjavac yourClass.java
yang akan membuat yourClass.class kemudian cd keluar darisrc
folder dan kemembangun
folder di sana anda dapat menjalankanjava package.youClass
Saya menggunakan Terminal pada Mac atau anda dapat menyelesaikan tugas yang sama dengan menggunakan Command Prompt pada windows
Jika anda menggunakan Eclipse... saya mengubah nama saya kelas utama file dan punya kesalahan. Aku pergi ke "Berjalan Sebagai" configurator dan bawah kelas jalan untuk proyek itu, telah terdaftar kedua file di kelas jalan. Saya dihapus kelas lama yang berganti nama saya dan meninggalkan kelas yang memiliki nama baru dan itu disusun dan berlari baik-baik saja.
Ini memecahkan masalah untuk saya hari ini:
Kemudian clean&membangun dan menjalankan setiap file yang anda butuhkan.