Как мне найти / выполнить файлы в пакете Java? - PullRequest
2 голосов
/ 29 марта 2012

Я пытаюсь научиться создавать и использовать пакеты на Java.Я экспериментировал со следующей программой «Hello World»

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

Когда я компилирую и запускаю эту программу в ее домашнем каталоге, все в порядке.Тем не менее, когда я создаю подкаталог - ./testPackage и помещаю в него следующий файл (hiEarth.java):

package testPackage;

class hiEarth
{
    public static void main (String[] args)
    {
    System.out.println("Hi Earth");
    }
}

Я могу его скомпилировать, но не могу запустить.

me@ubuntu:~/Projects/JavaProjects/helloWorld/testPackage$ javac hiEarth.java 

me@ubuntu:~/Projects/JavaProjects/helloWorld/testPackage$ java hiEarth

Exception in thread "main" java.lang.NoClassDefFoundError: hiEarth (wrong name: testPackage/hiEarth)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: hiEarth. Program will exit.

когда я делаю 'ls', я вижу то, что ожидаю увидеть:

me@ubuntu:~/Projects/JavaProjects/helloWorld/testPackage$ ls

hiEarth.class  hiEarth.java

Почему я не могу заставить java увидеть класс в настоящемкаталог?

Когда я перемещаю на один каталог выше:

me@ubuntu:~/Projects/JavaProjects/helloWorld/testPackage$ cd ..

me@ubuntu:~/Projects/JavaProjects/helloWorld$ java testPackage/hiEarth

Все работает нормально.Я думал, что это может быть проблема с classpath, но

me@ubuntu:~/Projects/JavaProjects/helloWorld/testPackage$ java -cp . hiEarth

тоже не работает.Что я здесь не понимаю?

Спасибо ....

1 Ответ

3 голосов
/ 29 марта 2012

Перейдите в ~ / Проекты / JavaProjects / helloWorld / и введите

java -cp . testPackage.hiEarth

Когда вы выполняете команду java, вам необходимо предоставить полное имя класса Java, который вы хотите выполнить (т. Е. Здесь, testPackage.hiEarth). Поиск классов будет относиться к каталогам и банкам, указанным в аргументе classpath. Следовательно, поиск testPackage.hiEarth приведет в этом случае к ./testPackage/hiEarth.class, который будет работать, если относительно ~ / Projects / JavaProjects / helloWorld /

Примечание: используйте соглашение об именах Java и используйте заглавную букву для вашего класса.

...