2013-07-05 3 views
6

Im используя фетровую 19. Содержание Helloworld.java:Java не удалось найти или загрузить основной класс

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

Я могу успешно скомпилировать его с помощью

javac HelloWorld.java

Но я не могу запустить его с помощью

java HelloWorld

Это дает следующее сообщение об ошибке

Error: Could not find or load main class HelloWorld

Но я могу запустить его с помощью

sudo java HelloWorld

Что я здесь отсутствует ???

+0

У вас есть разрешение на выполнение для 'java' под своим пользователем? – MadProgrammer

+0

Вы случайно скомпилировались как суперпользователь? –

+0

@MadProgrammer Как я могу проверить это? –

ответ

9

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

Try java -cp . HelloWorld

Источник here

Не знаю, почему он работает с Судом, хотя. Мой * предполагал, что CLASSPATH установлен для пользователя root, а не для текущего пользователя.

+0

Он работает с этим ... Почему мне нужно писать -cp? Что это значит? –

+0

Является ли это требованием для Linux, поскольку он работает только в Windows? – MadProgrammer

+0

cp означает ClassPath, которые являются всеми путями/папками, где могут быть найдены классы. оператор-точка означает «локальный каталог» –

0

Это довольно странно. Это кажется, как проблема в том, что при запуске java в качестве незащищенного пользователя он не может найти или прочитать файл «.class». Но при запуске как «root» вы можете.

Это говорит о том, что вам каким-то образом удалось создать файл HelloWorld.class с неправильным владельцем и/или неправильными разрешениями.

Проверьте разрешения, выполнив ls -l HelloWorld.class. Владелец должен быть вашей учетной записью пользователя (а не «root»), и вам нужно получить разрешение пользователя на файл.

Вот несколько других возможных объяснений:

  • java команда, которую вы используете, не может быть то, что вы думаете. Проверьте, что говорит which java, когда вы запускаете его как самостоятельно. Убедитесь, что это «реальный» java исполняемый файл, а не какой-либо скрипт или что-то в текущем каталоге или другом каталоге, который не будет находиться в корневом каталоге/sudo $PATH.

  • Возможно, вы установили переменную окружения CLASSPATH так, чтобы текущий каталог (где «HelloWorld.class» ... я предполагаю) не находится в пути к классам. Но когда вы sudo java, команда java работает со средой, в которой $CLASSPATH не установлен. В этом случае, если нет аргумента -cp, вы получите путь по умолчанию по умолчанию, состоящий только из "."; т.е. текущий каталог.


Если проблема оказывается переменной CLASSPATH среды, я рекомендую вам незадана ... и редактировать файлы «радиоуправляемые» вашей оболочки, чтобы сбросить его там.

Вместо этого используйте команду «-cp» в команде java, команду javac и т. Д. ... и переключитесь на Ant или Maven или на IDE для создания и запуска кода. (Или вы могли бы написать несколько небольших сценариев-оболочек в качестве прикладных пусковых установок.)

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

+0

Как я могу отключить переменную classpath –

+0

Используйте команду 'unset' shell. Или не устанавливать или «экспортировать» его в первую очередь –

4

Уважаемый Pranav Чага,

1- cmd - go the directory of located java file 

запустить следующее на ЦМД

2- javac HelloWorld.java 
3- java HelloWorld    ---- not not add .class 

здесь вы получите результат

0

У меня такая же проблема, просто попытка запустить HelloWorld на Mac 10.7.5. Я скомпилировал файл HelloWorld.java без проблем с javac. Затем я попытался запустить «java HelloWorld» и получил ту же ошибку: «Не удалось найти или загрузить основной класс»

Только после того, как я сменил каталог (cd) в терминале Mac на каталог, содержащий класс .class файл, который я смог запустить.

НТН, Стив

0

У меня такая же проблема раньше. Возможно, вы допустили ту же ошибку. Моя ошибка заключалась в использовании «cd» для входа в каталог пакета, а не в каталог прямо над ним. Например Венна каталог прямо выше, называются «Hello», вы можете запустить его, набрав: Java Привет/HelloWorld

0

кажется, что ваша установка CLASSPATH неправильно. проверить CLASSPATH и убедитесь, что:

CLASSPATH="YourJavaHome/lib:." 

быть внимание есть «:». в конце предложения! после этого запуска

source /etc/environment 

и она должна быть работа!

+0

Где я могу найти CLASSPATH? –

Смежные вопросы