Ошибка: Не удалось найти или загрузить главный класс

У меня возникли проблемы с компиляцией и запуском моего Java-кода, предназначенного для взаимодействия Java с общим объектом для Vensim, пакета имитационного моделирования.

Следующий код компилируется без ошибок:

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

Однако, когда я пытаюсь выполнить следующее:

java -cp ./apache-log4j-1.2.16/log4j-1.2.16.jar:./vensim.jar SpatialModel vars

я получаю следующую ошибку: "Error: Could not find or load main class SpatialModel ". Мой код SpatialModel.java содержит метод 'main' (ниже), поэтому я не уверен, в чем проблема - может ли кто-нибудь помочь мне? Спасибо.

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

}
Решение

Вы должны убедиться, что добавили местоположение файла .class в classpath. Так, если он находится в текущей папке, добавьте .class в classpath. Обратите внимание, что разделителем пути классов в Windows является точка с запятой, т.е. ;.

Комментарии (7)

Если класс находится в пакете

package thepackagename;

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

Потом звонит:

java -classpath . TheClassName

результатов по `ошибка: не удалось найти или загрузить основной TheClassName класса. Это потому, что его надо было бы назвать его полное имя:

java -classpath . thepackagename.TheClassName

И этот каталог thepackagename должен существовать в classpath. В этом примере,., значение текущего каталога, является совокупностью классов. Поэтому этот конкретный пример должен быть вызван из каталога, в которомthepackagename` существует.

Чтобы было понятно, название этого класса не TheClassName, она'thepackagename ых.TheClassName. Пытаясь выполнить TheClassName не работает, потому что нет занятия, что имя существует. Тока не на пути к классу в любом случае.

Наконец, отметим, что скомпилированный файл (.класс) версию, а не исходный код (.на Java) версию. Отсюда и “классов”.

Комментарии (4)

Вы можете попробовать эти два, когда вы получаете сообщение об ошибке: 'не удается найти или загрузить главный класс'

Если ваш класс файл сохраняется в каталоге с именем HelloWorldимя программы d:\sample`

  1. Ява -СР d:\sample файл HelloWorld
  2. Ява -СР . Файл HelloWorld
Комментарии (3)

Я полагаю, что вам нужно добавить текущий каталог в классовый путь Java

java -cp .:./apache-log4j-1.2.16/log4j-1.2.16.jar:./vensim.jar SpatialModel vars
Комментарии (5)

Вы должны указать путь к вашей команды javac и Java для

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

предположим, у вас есть следующие

Пакет: ком.тест Имя класса: Привет (с главной) файл находится внутри и"ГРЦ/ком/тест/Привет.Ява"и

из внешнего каталога:

$ cd src
$ javac -cp . com/test/*.java
$ java -cp . com/test/Hello
  • В Windows то же самое будет работать, я уже пробовал
Комментарии (0)

Если вы работаете в Eclipse, просто сделать очистку (\проект Чистый.. `очистить все проекты) проекта.

Комментарии (0)

Вы должны установить путь к классу, если вы получаете ошибку:

не удается найти или загрузить главный класс АБВ

Например:

E:\>set path="c:\programfiles\Java\jdk1.7.0_17\bin"
E:\>set classpath=%classpath%;.;
E:\>javac XYZ.java
E:\>java XYZ
Комментарии (0)

Я получил эту ошибку, потому что я пытался запустить

javac HelloWorld.java && java HelloWorld.class

когда я должен был удалить `.класса:

javac HelloWorld.java && java HelloWorld
Комментарии (2)

Проверьте ваш buildpath по, это может быть то, что вы ссылаетесь на библиотеку, которая больше не существует.

Комментарии (0)

Если вы'вновь получаю эту ошибку и вы использование Maven для сборки банок, то есть хороший шанс, что вы просто не имеют Java-классов в src/главная/Java/.

В моем случае я создал мой проект в Eclipse по умолчанию ГРЦ (а не src/главная/Java/.

Так что я в конечном итоге с чем-то вроде пакета mypackage.morepackage.класса MyClass и структуру каталогов, как в src/пакета mypackage/morepackage/класса MyClass, которая по своей сути не имеет ничего плохого. Но при запуске чистой установки МВНбудем искатьsrc/главная/Java/пакета mypackage/morepackage/класса MyClass`. Он не найдет класс, но он выиграл'т-либо ошибки. Поэтому он будет успешно строить и вас при запуске выдается банку в результате:

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

Потому что он просто никогда не включал свой класс в упакованной банке.

Комментарии (2)

Если вы пытаетесь запустить Java-приложения, который должен с JDK 1.6 и вы пытаетесь работать на JDK 1.4, вы столкнетесь с этой ошибкой. В общем, пытаюсь запустить Java-приложение на старую версию JRE может потерпеть неудачу. Попробуйте установить новый JRE/JDK для.

Комментарии (0)

Я знаю, что этот вопрос был с тегами Linux, но на windows, вам может понадобиться, чтобы отделить ваши аргументы СР с ; вместо :.

Ява -СР ./apache-log4j-1.2.16/log4j-1.2.16.jar;./SpatialModel vensim.jar Варс

http://docs.oracle.com/javase/7/docs/technotes/tools/windows/classpath.html

Комментарии (0)

Проект > очистить и затем убедитесь, buildpath по > библиотеки имеет правильную библиотеку.

Комментарии (0)

Java с опцией-verbose:класс HelloWorld может помочь вам понять, какие классы загружаются.

Также, Как упоминалось ранее, не забывайте называть полное имя (т. е. включать в пакет).

Комментарии (0)

Проблема не в вашей основной функции. Проверьте

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

вывод и запустите его.

Комментарии (0)

Я был с использованием Java 1.8, и эта ошибка вдруг произошла, когда я нажал на "строить и чистить" в среде NetBeans. Я переключила на какой-то миг до 1,7 раз, нажал ОК, снова открыл свойства и переключается обратно на 1.8, и все работало отлично.

Я надеюсь, что смогу помочь кому-то с этим, так как эти ошибки могут быть достаточно трудоемким.

Комментарии (0)

Эта проблема возникла для меня, когда я импортировать существующий проект в Eclipse. Что происходит, она скопировала все файлы не в пакете, но вне пакета. Поэтому, когда я попытался запустить > запуск конфигураций, он не мог'т найти основной метод, потому что он не был в пакете. Я всего лишь скопировать файлы в пакет и Eclipse, затем удалось обнаружить основной метод. Так что в конечном счете убедиться, что затмение может найти метод main, убедитесь, что ваш Java-файлы находятся в нужном пакете.

Комментарии (0)

Если все так просто, чем думают многие, включая меня :)

КР проекта каталог/ГНЦ/пакет там вы должны увидеть yourClass.java затем запустите и javac yourClass.java в котором будет создать yourClass.class затем компакт-диск из ГРЦ папку в сборки папка есть вы можете запустить пакет Java.youClass

Я использую терминал на Mac или вы можете выполнить ту же задачу с помощью командной строки в Windows

Комментарии (0)

Если вы используете Eclipse... я переименовал мой основной файл класса и получил эту ошибку. Я пошел, чтобы "запуска" в конфигураторе и в путь к классу для этого проекта, она перечислила оба файла в путь к классу. Я удалил старый класс, который я переименовал и оставил класс, который имел новое имя и он компилировался и работал нормально.

Комментарии (0)

Это решило вопрос для меня сегодня:

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

Затем очистить и усилитель;строить и запускать отдельные файлы вам нужна.

Комментарии (0)