Невозможно запустить программу Java из командной строки Windows XP - ClassNotFoundException - PullRequest
0 голосов
/ 17 марта 2011

Я пытаюсь создать и запустить программу Java из строки CMD Windows XP, которая завершается неудачей, выполнив следующие действия. Может кто-нибудь сказать мне, что выглядит неправильно / что еще попробовать?

C:\> java -version
java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) Client VM (build 19.1-b02, mixed mode)

C:\> mkdir c:\j\
C:\> cd c:\j\
C:\j\> notepad Test.java

(открывается Блокнот, куда я вставляю следующий текст и сохраняю, затем закрываю.)

public class Test{
  public static void main(String[] args){
    System.out.println("hi");
  }
}

C:\j\> javac Test.java
C:\j\> java Test
Exception in thread "main" java.lang.NoClassDefFoundError: test
Caused by: java.lang.ClassNotFoundException: test
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: test.  Program will exit.

Реальная проблема заключается в том, что, когда я пытаюсь отладить проект с Eclipse, я получаю сообщение об ошибке, что он «не может создать виртуальную машину Java», и я пытаюсь сначала протестировать компиляцию и запуск программы без IDE, чтобы убедитесь, что моя установка JDK работает.


Обновление: Вы правы, что CLASSPATH установлен на моем компьютере, однако я все еще получаю исключение. Выполнение предложенной строки дает:

C:\j>java -cp . Test
Exception in thread "main" java.lang.NoClassDefFoundError: test (wrong name: Test)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(Unknown Source)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$000(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: test.  Program will exit.

Ответы [ 4 ]

4 голосов
/ 17 марта 2011

Похоже, что переменная среды CLASSPATH установлена ​​на вашем компьютере, и значение не включает традиционную точку (.) Для представления текущего каталога.Вы можете указать Java выглядеть в текущем каталоге следующим образом:

java -cp.Тест

(это тестирование пробела).

0 голосов
/ 17 марта 2011

Это не совсем ответ, потому что это не желаемое поведение, но мой класс был определен (и в командах командной строки на него ссылались как «Тест» с заглавной буквой «Т», и я видел запуск ошибка, говорящая о том, что класс «test» со строчной буквой «t» не найден. После долгих проб и ошибок я переименовал «Test.java» в «test.java» и отредактировал исходный файл, определив класс «test» вместо «Test». После этого я перекомпилировал и запустил программу командой командной строки: «java test». Теперь это работает. Установка Java, с которой я работаю, по-видимому, не позволяет классам, имена которых начинаются с заглавных букв ...?

0 голосов
/ 17 марта 2011

Тогда ответьте на вопрос 2: то, что вы нам показываете, не является настоящей копией и вставкой.Проблема, с которой вы столкнулись, заключается в том, что регистр букв, используемый для именования класса «Test» в исходном коде Java, и регистр букв, который вы используете для вызова класса в командной строке, не совпадают.Исходя из сообщения об ошибке, я бы сказал, что в исходном коде написано «класс Test», но вы набираете «java test» в командной строке.

0 голосов
/ 17 марта 2011

Что эта команда выводит на экран?

C:\j> ls

Если вы не видите Test.class, снова скомпилируйте программу, т.е. javac Test.java, а затем выполните ее как java Test

При редактировании: -

Желательно не создавать классы с меньшими делами. Пожалуйста, обратитесь к Соглашение о кодировании Java . Попробуйте вручную удалить Test.class. Перекомпилируйте код и запустите его снова.

...