Я получаю ошибку
Исключение в потоке "основной" java.lang. NoClassDefFoundError:
Когда я пытаюсь выполнить скомпилированный класс на Ubuntu. Я использую очень простой пример Helloworld и миллионы ответов, которые уже существуют в Интернете, предполагают, что мой ПУТЬ К КЛАССУ и переменные JAVA_HOME были неправильно установлены.
Однако я отредактировал и т.д./среда к корректным папкам, а также текущей папке:
СОЕДИНИТЕ КАНАЛОМ = ".:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
JAVA_HOME = "/usr/lib/jvm/java-1.5.0-sun /"
ПУТЬ К КЛАССУ = ".:/usr/lib/jvm/java-1.5.0-sun/lib"
и они появляются, когда я ввожу команду набора. В любом случае, даже когда я установил путь к классу вручную с помощью
Java sudo - CP. myfirstjavaprog.class
Я получаю ту же ошибку. Где еще я должен посмотреть? Это должно быть проблемой конфигурации.
Большое спасибо
Вы хотите отказаться от .class в конце. Просто введите...
java -cp . myfirstjavaprog
Я настоятельно рекомендую вам потратить немного времени на изучение Солнца. Это поможет вам позже - Пути классов - печально известные создатели проблем.
Хорошо, я искал проблему не в том месте. Оказалось, что Java в порядке, и я стал жертвой одной и той же ошибки для двух отдельных проблем.
Изначально я пытался запустить свинговый пример, который я получил с сайта Java, но не заметил, что в нем есть определение пакета. Я установил правильную структуру папок и теперь он работает нормально.
Когда я пытался запустить пример HelloWorld, я случайно включил расширение .class.
Обе эти проблемы дали мне ошибку ClassNotFound.
Большое спасибо за всю вашу помощь.
Вы смешиваете яблоки и апельсины. Сырой java или javac вызов в командной строке нуждается в класспате, чтобы знать, где он может получить доступ к своим классам. Когда вы запускаете
java -cp pathelement1:pathelement2... MyClass
, вы даете java список мест, где можно найти выполняемые классы. Он не будет искать нигде, включая "...", если только вы не скажете ему. Таким образом, "CLASSPATH" не поможет вам, если вы не запустите
java -cp $CLASSPATH MyClass
Inotherwords, это просто ярлык, чтобы сохранить необходимость перепечатывать класспат.
Многие программы настроены на использование JAVA_HOME, но, в конечном счете, для запуска java-программ нужен только настроенный путь к classpath и путь к java (они находят его через переменную JAVA_HOME, так что он все еще нужен для таких вещей, как муравей, но это' все еще концептуально просто ярлык).
ваш PATH - это путь, по которому система ищет двоичные файлы. Если java не находится на вашем пути (наберите "какой java", он покажет вам, какой java находится на вашем пути, если он есть), запуск /full/path/to/java идентичен простому запуску "java", и наличие в системе двоичного файла в переменной PATH.
.для установки переменной java_home, вот инструкции.
http://luckydev07.blogspot.com/2009/08/setting-javahome-in-ubuntu-linux.html
и
classpath можно установить аналогично
.Нет, я думаю, что переменные окружения CLASSPATH игнорируются.
Правильный способ сделать это - использовать опцию -classpath при компиляции и запуске. Установите ее для каждого проекта. Доказательства, которые у вас перед глазами, говорят о том, что это так.
Почему CLASSPATH игнорируется? Несколько причин:
Настоятельно рекомендую избавиться от переменной окружения CLASSPATH, или, по крайней мере, убрать из нее JRE/JDK.
"."
неявно присутствует в класспате, если не указано иное. А начиная с Java 1.3, Java достаточно умна, чтобы найти своё собственное время выполнения и библиотеки, основанные на пути выполнения исполняемых файлов javac/java. С тех пор, было излишне, если не совсем неправильно, указывать их в classpath. Конечно .../lib
некорректен, т.к. там только банки, никаких классов, и они не берутся из classpath, если они не имеют индивидуального и явного имени.
Современные javas достаточно умны, что вы можете просто набрать java
, когда будете стоять в корневом каталоге classpath, и это будет просто Work™.