2011-08-15 21 views
9

Próbuję uruchomić plik test.class z wiersza poleceń systemu Linux. Skompilowałem plik przy użyciu javac test.java, który wygenerował plik test.class. Kiedy uruchamiam polecenie java test, generuje wyjątek klasy nie znaleziony. Próbowałem również określić nazwę pakietu z tym samym wynikiem. Oto wynik, czy ktoś może pomóc? Uważam, że moja składnia jest poprawna zgodnie z wyszukiwaniami Google.Dlaczego otrzymuję NoClassDefFoundError po uruchomieniu pliku klasy Java z wiersza poleceń w systemie Linux?

[[email protected] usr]# java test 
Exception in thread "main" java.lang.NoClassDefFoundError: test (wrong name: testJava/test) 
     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: test. Program will exit. 
+0

Jaki jest zadeklarowany pakiet w twojej klasie? Czy twoja struktura katalogów naśladuje deklarację pakietu? – Jeremy

Odpowiedz

4

Zastosowanie java testJava.test z katalogu nadrzędnego testJava

+0

Tak właśnie zrobiłem w przeszłości, ale z jakiegoś powodu nie działa. To była pierwsza rzecz, którą próbowałem. – tier1

+0

@tkcsam: Czy twój katalog 'usr' zawiera' testJava', czy możesz wydrukować zawartość katalogu 'usr' i' testJava' używając polecenia ls? – Ankur

+0

Ach, prowadzisz mnie do poprawnej odpowiedzi! Nie miałem instrukcji testJava. Dziękuję wszystkim! – tier1

8

Musisz skompilować plik .java z javac:

javac MyFile.java 

Następnie uruchom plik używając Java

java MyFile 

Jeśli robisz to i jeszcze nie praca, oznacza to, że musisz upewnić się, że plik i nazwa klasy w pliku mają tę samą nazwę ... więc MyFile.java zawiera

class MyFile 
    { 
    // ... 
    public static void main(String[] args) 
    { 
     // ... 
    } 
    // ... 
    } 
+0

Zrobiłem to. Skompilowałem i próbowałem uruchomić go tak, jak pokazano, ale z jakiegoś powodu nie można znaleźć klasy. – tier1

+0

Jeśli tworzysz całkiem nowy plik za pomocą np. vi lub vim, o nazwie MyFile.java, przeciąć powyższy kod i wkleić go do pliku, zapisać i wykonać linie javac i java, czy pojawia się ten sam błąd? Zrób to wszystko z wiersza poleceń w katalogu, w którym zapisujesz MyFile. Nie używaj niczego nadzwyczajnego. Trudno powiedzieć, czy jest to problem z kodem, problem z językiem Java czy problem z OS/fs. – Patrick87

+0

hm działa, gdy utworzę nowy plik, jak sugerujesz. Chociaż twój przykład nie określa nazwy pakietu ... – tier1

1

Zakładając, że klasy wygląda następująco:

package javaTest; 

public class test{ 
    public static void main(String[] a){ 
     System.out.println("Test"); 
    } 
} 

Następnie skompilować i uruchomić plik, po prostu to zrobić:

$ ls 
testJava 
$ ls testJava 
test.java 
$ javac testJava/test.java 
$ java testJava.test 
Test 

Oznacza to, że musisz uruchomić klasę z pełną nazwą, która zawiera nazwę pakietu klasy. Musisz również to zrobić. z katalogu, który zawiera root twojego pakietu. (O ile nie określisz katalogu "root" z flagą -cp.)

1

Ja też miałem problem na początku.

java -cp. Przetestuj

Wypróbuj ten link i myślę, że może ci pomóc.

+0

Zawsze zapomnij umieścić. w CP, nie wiem dlaczego to robią. Dzięki!! Wrócę za mniej więcej miesiąc: D –

Powiązane problemy