Это довольно странно. Это кажется, как проблема в том, что при запуске 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. Он может дать вам неприятные сюрпризы, особенно если вы переключаетесь между проектами кодирования. (Конечно, не зависят от него в производственной среде!)
У вас есть разрешение на выполнение для 'java' под своим пользователем? – MadProgrammer
Вы случайно скомпилировались как суперпользователь? –
@MadProgrammer Как я могу проверить это? –