2010-02-18 6 views
2

Я пытаюсь запустить программу java, которую я создал, но я хочу запустить ее из определенного каталога. При указании относительного пути к файлу класса, который я хочу запустить, этот путь содержит каталог с периодом в нем и, похоже, отключает java; Так, например, когда я пытаюсь запустить:работает с Java.exe, когда существует период в имени каталога

java -classpath myPath/myPath-1.2.3/myLongPath myPath/myPath-1.2.3/myLongPath/myProg 

Java ошибки, говоря, что он не может найти класс (NoClassDefFoundError); Это имеет смысл, потому что я вижу, что java смотрит в другой каталог, чем тот, который я указал; Он смотрит в: myPath/myPath-1/2/3/myLongPath вместо: myPath/myPath-1.2.3/myLongPath

Try, как я мог, я не могу понять, как указать на Java. exe, что каталог, который я хочу просмотреть, содержит периоды. Я пытался \ избегать периодов, но это не помогает. Кто-нибудь сталкивался с этой проблемой раньше? Кстати, я запускаю linux в терминале gnome. Спасибо за любую помощь.

ответ

6

Последний параметр в вызове java - это имя запускаемого класса. Это не имя файла, а имя класса. Он включает полное имя пакета (если класс не находится в пакете по умолчанию), разделенный точками (а не слэшем). Ни имя класса, ни имя пакета не могут содержать точки. Папка, представляющая путь к пакету, не должна включаться в каталоги, включенные в путь к классам (должен быть только верхний каталог для папки класса).

В вашем случае это всего лишь myProg, но чтобы убедиться, что такое имя класса (включая имя пакета) класса с основным методом?

Пример:

Если у меня есть класс mypackage.mysubpackage.MainClass, и файл класса находится в /home/me/project/1.3/build/mypackage/mysubpackage/MainClass.class, то команда для запуска класс будет java -cp /home/me/project/1.3/build mypackage.mysubpackage.MainClass.

+1

, приведенный вами пример помог мне понять, что я делаю неправильно. Таким образом, команда должна была быть: java -classpath myPath/myPath-1.2.3/myLongPath myProg Теперь я вижу, что путь пакета никогда не имеет периодов в нем, поэтому я никогда не должен сталкиваться с периодом в пакете- путь, пока я правильно определяю свой путь пакета. – lomilomi26

1

Java использует период как разделитель компонентов пакета, поэтому он просто не может появляться в именах классов. Поскольку имена классов привязаны к структурам каталогов, они не могут отображаться в именах каталогов, используемых в путях классов, и никакое количество экранов не поможет вам там. (Было бы лучше использовать разделитель каталогов как разделитель компонентов пакета, но они отличаются между операционными системами, и Java хотела быть независимой от ОС. Это одна из цен, которая должна быть оплачена за это.)

+0

Точка может отображаться в пути к классам, без проблем. Он просто не может существовать в имени пакета, т. Е. Он не должен находиться в каталоге * внутри *. –