Spec-Zone .ru
спецификации, руководства, описания, API
След: Начинание

Урок: Типичные проблемы (и Их Решения)

Проблемы компилятора

Распространенная ошибка обменивается сообщениями на Microsoft Windows Systems

'javac' is not recognized as an internal or external command, operable program or batch file

Если Вы получаете эту ошибку, Windows не может найти компилятор (javac).

Вот один способ сказать Windows, где найти javac. Предположите, что Вы устанавливали JDK в C:\jdk1.7.0. При подсказке Вы ввели бы следующую команду, и нажатие Войдите:

C:\jdk1.7.0\bin\javac HelloWorldApp.java

Если Вы выбираете эту опцию, необходимо предшествовать Вашему javac и java команды с C:\jdk1.7.0\bin\ каждый раз Вы компилируете или выполняете программу. Чтобы избежать этого дополнительного ввода, консультируйтесь с разделом, Обновляющим переменную ПУТИ в JDK 7 инструкций по установке.

Class names, 'HelloWorldApp', are only accepted if annotation processing is explicitly requested

Если Вы получаете эту ошибку, Вы забыли включать .java снабдите суффиксом, компилируя программу. Помните, команда javac HelloWorldApp.java нет javac HelloWorldApp.

 

Распространенная ошибка обменивается сообщениями на Системах UNIX

javac: Command not found

Если Вы получаете эту ошибку, UNIX не может найти компилятор, javac.

Вот один способ сказать UNIX, где найти javac. Предположите, что Вы устанавливали JDK в /usr/local/jdk1.7.0. При подсказке Вы ввели бы следующую команду и Возврат нажатия:

/usr/local/jdk1.7.0/javac HelloWorldApp.java

Отметьте: Если Вы выбираете эту опцию, каждый раз, когда Вы компилируете или выполняете программу, необходимо предшествовать Вашему javac и java команды с /usr/local/jdk1.7.0/. Чтобы избежать этого дополнительного ввода, Вы могли добавить эту информацию к своей переменной ПУТИ. Шаги для того, чтобы сделать так изменятся, в зависимости от которой оболочки Вы являетесь в настоящий момент рабочими.

Class names, 'HelloWorldApp', are only accepted if annotation processing is explicitly requested

Если Вы получаете эту ошибку, Вы забыли включать .java снабдите суффиксом, компилируя программу. Помните, команда javac HelloWorldApp.java нет javac HelloWorldApp.

Синтаксические ошибки (Все Платформы)

Если Вы вводите часть с опечаткой программы, компилятор может выпустить синтаксическую ошибку. Сообщение обычно выводит на экран тип ошибки, номер строки, где ошибка была обнаружена, код той строки, и позиция ошибки в пределах кода. Вот ошибка, вызванная, опуская точку с запятой (;) в конце оператора:

testing.java:14: `;' expected.
System.out.println("Input has " + count + " chars.")
                                                     ^
1 error

Иногда компилятор не может предположить Ваше намерение и печатает запутывающее сообщение об ошибке или многократные сообщения об ошибках, если ошибка располагает каскадом более чем несколько строк. Например, следующий фрагмент кода опускает точку с запятой (;) от полужирной строки:

while (System.in.read() != -1)
    count++
System.out.println("Input has " + count + " chars."); 

Обрабатывая этот код, компилятор выпускает два сообщения об ошибках:

testing.java:13: Invalid type expression.
        count++
                 ^
testing.java:14: Invalid declaration.
    System.out.println("Input has " + count + " chars.");
                      ^
2 errors

Компилятор выпускает два сообщения об ошибках потому что после того, как он обрабатывает count++, состояние компилятора указывает, что находится в середине выражения. Без точки с запятой у компилятора нет никакого способа знать, что оператор полон.

Если Вы видите какие-либо ошибки компилятора, то Ваша программа успешно не компилировала, и компилятор не создавал a .class файл. Тщательно проверьте программу, фиксируйте любые ошибки, которые Вы обнаруживаете, и попробовали еще раз.

Семантические Ошибки

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

testing.java:13: Variable count may not have been initialized.
        count++
        ^
testing.java:14: Variable count may not have been initialized.
    System.out.println("Input has " + count + " chars.");
                                       ^
2 errors

Снова, Ваша программа успешно не компилировала, и компилятор не создавал a .class файл. Фиксируйте ошибку и попробуйте еще раз.

Проблемы времени выполнения

Сообщения об ошибках на Microsoft Windows Systems

Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorldApp

Если Вы получаете эту ошибку, java не может найти Ваш файл байт-кода, HelloWorldApp.class.

Одно из мест java попытки найти Ваш .class файл является Вашим текущим каталогом. Так если Ваш .class файл находится в C:\java, следует изменить свой текущий каталог на это. Чтобы изменить Ваш каталог, введите следующую команду при подсказке, и нажатие Войдите:

cd c:\java

Подсказка должна измениться на C:\java>. Если Вы входите dir при подсказке следует видеть Ваш .java и .class файлы. Теперь войдите java HelloWorldApp снова.

Если у Вас все еще есть проблемы, Вам, возможно, придется заменить Вашу переменную ПУТИ К КЛАССУ. Чтобы видеть, необходимо ли это, попытайтесь ударить путь к классу со следующей командой.

set CLASSPATH=

Теперь войдите java HelloWorldApp снова. Если программа работает теперь, необходимо заменить свою переменную ПУТИ К КЛАССУ. Чтобы установить эту переменную, консультируйтесь с Обновлением раздела переменной ПУТИ в JDK 7 инструкций по установке. Переменная ПУТИ К КЛАССУ устанавливается тем же самым способом.

Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorldApp/class

Частая ошибка, сделанная программистами новичка, состоит в том, чтобы попытаться работать java средство запуска на .class файл, который создавался компилятором. Например, Вы получите эту ошибку, если Вы попытаетесь выполнить свою программу с java HelloWorldApp.class вместо java HelloWorldApp. Помните, параметром является имя class, который Вы хотите использовать, не имя файла.

Exception in thread "main" java.lang.NoSuchMethodError: main

У Java VM требует, чтобы class Вы выполнились с этим, есть a main метод, в котором можно начать выполнение Вашего приложения. Более близкий Взгляд на "Привет Мир!" Приложение обсуждает main метод подробно.

Сообщения об ошибках на Системах UNIX

Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorldApp

Если Вы получаете эту ошибку, java не может найти Ваш файл байт-кода, HelloWorldApp.class.

Одно из мест java попытки найти Ваш файл байт-кода являются Вашим текущим каталогом. Так, например, если Ваш файл байт-кода находится в /home/jdoe/java, следует изменить свой текущий каталог на это. Чтобы изменить Ваш каталог, введите следующую команду при Возврате нажатия и подсказке:

cd /home/jdoe/java

Если Вы входите pwd при подсказке следует видеть /home/jdoe/java. Если Вы входите ls при подсказке следует видеть Ваш .java и .class файлы. Теперь войдите java HelloWorldApp снова.

Если у Вас все еще есть проблемы, Вам, возможно, придется изменить Вашу переменную окружения ПУТИ К КЛАССУ. Чтобы видеть, необходимо ли это, попытайтесь ударить путь к классу со следующей командой.

unset CLASSPATH

Теперь войдите java HelloWorldApp снова. Если программа работает теперь, необходимо заменить свою переменную ПУТИ К КЛАССУ тем же самым способом как переменная ПУТИ выше.

Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorldApp/class

Частая ошибка, сделанная программистами новичка, состоит в том, чтобы попытаться работать java средство запуска на .class файл, который создавался компилятором. Например, Вы получите эту ошибку, если Вы попытаетесь выполнить свою программу с java HelloWorldApp.class вместо java HelloWorldApp. Помните, параметром является имя class, который Вы хотите использовать, не имя файла.

Exception in thread "main" java.lang.NoSuchMethodError: main

У Java VM требует, чтобы class Вы выполнились с этим, есть a main метод, в котором можно начать выполнение Вашего приложения. Более близкий Взгляд на "Привет Мир!" Приложение обсуждает main метод подробно.


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Предыдущий Урок
Следующая страница: Конец Следа