Подтвердить что ты не робот

Не удалось найти основной класс HelloWorld

Я установил Java 1.7.0 в следующую папку C:\Program Files\Java. Моя операционная система - Windows XP (версия 2002) с Service Pack 3.

Переменные среды, которые я установил:

  • CLASSPATH: C:\Program Files\Java\jdk1.7.0\jre\lib\rt.jar;

  • Путь: C:\Program Files\Java\jdk1.7.0\bin;

  • JAVA_HOME: C:\Program Files\Java;

Я представил здесь имена классов, которые находятся в моей системе.

Далее я написал программу HelloWorld.java:

import java.io.*;

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

Когда я компилирую с помощью javac HelloWorld.java, он компилируется отлично.

Но после выпуска java HelloWorld я столкнулся с ошибкой ниже:

Error: Could not find main class HelloWorld
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:198)

Caused by: java.lang.ClassNotFoundException: HelloWorld
        at java.net.URLClassLoader$1.run(URLClassLoader.java:299)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:288)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:287)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:422)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:325)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:355)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:195)

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

Я даже ВОССТАНОВИЛ машину, а затем снова попытался запустить, но с той же судьбой.

4b9b3361

Ответ 1

Вы не устанавливаете путь к классу, который включает ваш скомпилированный класс! java не может найти какие-либо классы, если вы не скажете, где искать.

java -cp [compiler outpur dir] HelloWorld

Кстати, вам не нужно устанавливать CLASSPATH так, как вы это делали.

Ответ 2

Скажите, где искать класс: он в ".", который является текущим каталогом:

java -classpath . HelloWorld

Не нужно устанавливать JAVA_HOME или CLASSPATH в этом случае

Ответ 3

Просто удалите свой "classpath" из переменной среды. Затем попробуйте запустить:

java HelloWorld 

Это должно работать нормально.

Ответ 4

Java не находит, где находится ваш скомпилированный файл класса (HelloWorld.class). Он использует каталоги и JAR файлы в переменной среды CLASSPATH для поиска, если при запуске java.exe указывается опция -cp или -classpath.

Вам не нужен rt.jar в CLASSPATH, это было необходимо только для более старых версий Java. Вы можете оставить его undefined и использовать текущий рабочий каталог или просто добавить . (одну точку), разделенную ';', на переменную CLASSPATH, чтобы указать текущий каталог:

CLASSPATH: .;C:\...\some.jar

В качестве альтернативы вы можете использовать опцию -cp или -classpath:

java -cp . HelloWorld

И, как писал Андреас, JAVA_HOME не требуется Java, просто для некоторых сторонних инструментов, таких как ant (но должен указывать на правильное местоположение).

Ответ 5

Вы либо хотите добавить "." на ваш CLASSPATH, чтобы указать текущий каталог или добавить его вручную во время выполнения, как предположил unbeli.

Ответ 6

put.; при значении classpath в начале.. он начнет работать... это происходит потому, что он ищет файл класса в classpath, который упоминается в переменной пути.

Ответ 7

JAVA_HOME не требуется, если вы запускаете java и javac из командной строки. Но JAVA_HOME должен указывать на реальный каталог jdk, C:\Program Files\Java\jdk1.7.0 в вашем случае.

Я бы никогда не использовал переменную окружения CLASSPATH вне сценариев сборки, особенно не глобальную. Флаг -cp лучше. Но в вашем случае, поскольку вам не нужны дополнительные библиотеки (rt.jar не учитывается), вам не понадобится объявление classpath. Отсутствующий -cp эквивалентен -cp . и что вам здесь нужно)

Класс HelloWorld должен быть объявлен как public. Это действительно может быть причиной ваших проблем. (я был уверен, что исходный файл нуждается в одном открытом классе... или это был только один открытый класс?)

Ответ 8

У меня была та же проблема. Возможно, проблема в том, что вы скомпилировали и выполнили класс с разными версиями Java.

Убедитесь, что версия компилятора совпадает с командой "java" :

javac -version

java -version

В Linux используйте

sudo update-alternatives --config java

чтобы изменить версию Java.

Ответ 9

У меня также была такая же проблема....

На самом деле эта проблема возникает из-за того, что ваши файлы программы .class не сохраняются в этом каталоге. Удалите CLASSPATH из переменной среды (вам не нужно устанавливать путь к классам для простых программ Java) и повторно открывайте приглашение cmd, затем компилируйте и выполняйте.

Если вы внимательно наблюдаете, ваш файл .class будет сохранен в том же месте. (Я не эксперт, я также базовый программист, если в моих предложениях есть какая-либо ошибка, пожалуйста, проигнорируйте его:-))

Ответ 10

Похоже, что вы все правильно настроили, но может быть одна область, где это может вызвать проблемы.

Проверьте значение переменной "CLASSPATH" и убедитесь, что в конце вы сохранили ;.

Примечание: ; - для концевого разделителя . предназначен для включения существующего пути в конец