Не удалось найти основной класс 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)
После небольшого поиска, я обнаружил, что в переменной среды может быть что-то неправильное. Я пытался играть с этим, но не повезло.
Я даже ВОССТАНОВИЛ машину, а затем снова попытался запустить, но с той же судьбой.
Ответы
Ответ 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" и убедитесь, что в конце вы сохранили ;.
Примечание:
; - для концевого разделителя
. предназначен для включения существующего пути в конец