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));
    }

}
Larutan

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 ;.

Komentar (7)

Jika kelas dalam paket

package thepackagename;

public class TheClassName {
  public static final void main(String[] cmd_lineParams)  {
     System.out.println("Hello World!");
  } 
}

Kemudian memanggil:

java -classpath . TheClassName

hasil di Error: tidak Dapat menemukan atau beban utama kelas TheClassName. Hal ini karena itu harus disebut dengan fully-qualified name:

java -classpath . thepackagename.TheClassName

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 mana thepackagename ada.

Untuk menjadi jelas, nama kelas ini tidak TheClassName, It's thepackagename.TheClassName. Mencoba untuk mengeksekusi TheClassName 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."

Komentar (4)

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 program d:\sample

  1. java -cp d:\sample HelloWorld
  2. java -cp . HelloWorld
Komentar (3)

Saya percaya anda perlu menambahkan direktori saat ini ke classpath Java

java -cp .:./apache-log4j-1.2.16/log4j-1.2.16.jar:./vensim.jar SpatialModel vars
Komentar (5)

Anda harus menyertakan classpath untuk anda javac dan java perintah

javac -cp . PackageName/*.java
java -cp . PackageName/ClassName_Having_main

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:

$ cd src
$ javac -cp . com/test/*.java
$ java -cp . com/test/Hello
  • Pada windows hal yang sama akan bekerja juga, saya sudah mencoba
Komentar (0)

Jika anda bekerja di Eclipse, hanya membuat pembersihan (proyek\bersih.. bersih semua proyek-proyek) proyek.

Komentar (0)

Anda harus mengatur classpath jika anda mendapatkan error:

tidak Bisa menemukan atau beban utama kelas XYZ

Misalnya:

E:\>set path="c:\programfiles\Java\jdk1.7.0_17\bin"
E:\>set classpath=%classpath%;.;
E:\>javac XYZ.java
E:\>java XYZ
Komentar (0)

Aku punya kesalahan ini karena saya mencoba untuk menjalankan

javac HelloWorld.java && java HelloWorld.class

ketika aku harus dihapus .kelas:

javac HelloWorld.java && java HelloWorld
Komentar (2)

Periksa BuildPath, bisa jadi yang anda referensi perpustakaan yang tidak ada lagi.

Komentar (0)

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 (bukan src/main/java/.

Jadi saya berakhir dengan sesuatu seperti mypackage.morepackage.myclass dan struktur direktori seperti src/mypackage/morepackage/myclass, yang secara inheren tidak ada yang salah. Tapi ketika anda menjalankan mvn clean install itu akan mencari src/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:

Error: Could not find or load main class mypackage.morepackage.myclass

Karena itu hanya tidak termasuk kelas anda dalam kemasan Botol.

Komentar (2)

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.

Komentar (0)

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

Komentar (0)

Proyek > Bersih dan kemudian pastikan BuildPath > Perpustakaan telah benar Perpustakaan.

Komentar (0)

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).

Komentar (0)

Masalahnya bukan tentang fungsi utama anda. Check out untuk

javac -d . -cp ./apache-log4j-1.2.16/log4j-1.2.16.jar:./vensim.jar SpatialModel.java     VensimHelper.java VensimException.java VensimContextRepository.java

output dan menjalankannya.

Komentar (0)

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.

Komentar (0)

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.

Komentar (0)

Jika begitu sederhana daripada banyak orang berpikir, termasuk saya :)

cd untuk Proyek Folder/src/paket di sana anda akan melihat yourClass.java kemudian jalankan javac yourClass.java yang akan membuat yourClass.class kemudian cd keluar dari src folder dan ke membangun folder di sana anda dapat menjalankan java package.youClass

Saya menggunakan Terminal pada Mac atau anda dapat menyelesaikan tugas yang sama dengan menggunakan Command Prompt pada windows

Komentar (0)

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.

Komentar (0)

Ini memecahkan masalah untuk saya hari ini:

cd /path/to/project
cd build
rm -r classes

Kemudian clean&membangun dan menjalankan setiap file yang anda butuhkan.

Komentar (0)