2012-06-14 3 views
9

Mam dwie klasy java w następujący sposób:jak uruchomić klasy java z ma nazwę pakietu

1.

none package class 
System.out.println("App1 hello world..."); 

2.

has package 
package java.java.package1; 

System.out.println("App1 hello world..."); 

następnie skompilować i uruchomić je, wynik następujący:

D:\javaTest>javac App1.java 

D:\javaTest>javac App2.java 

D:\javaTest>java App1 
App1 hello world... 

D:\javaTest>java java.java.package1.App2 

Exception in thread "main" java.lang.NoClassDefFoundError: java/java/package1/Ap 
p2 
Caused by: java.lang.ClassNotFoundException: java.java.package1.App2 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
Could not find the main class: java.java.package1.App2. Program will exit. 

tak, jak uruchomić klasa App2?

Odpowiedz

18

Należy skompilować za pomocą opcji -d tak, że zajęcia kończy się w odpowiedniej hierarchii katalogów:

javac -d . App2.java 
java java.java.package1.App2 

Ponadto, nie należy używać nazwy pakietu począwszy java w pierwszej kolejności.

Ponadto, jeśli wstawisz źródło w odpowiedniej hierarchii katalogów i skompilujesz/uruchomisz z katalogu głównego hierarchii, nie będziesz miał tego problemu.

+1

Oprócz tego, co powiedział Chuck Norris: Kiedy kompilujesz i jesteś w katalogu głównym hierarcy, musisz użyć '/' zamiast '.". Po uruchomieniu programu jest on odwrócony: użyj '.' zamiast'/'. –

0

Aplikacja App2 musi znajdować się w katalogu java/java/pakiet1. W java nazwa pakietu i katalog dla kodu źródłowego muszą być zgodne. Czy nie wystąpił błąd kompilacji?

1

Musisz umieścić -d directory Options..because

ustawić katalog docelowy dla plików klasowych. Jeśli klasa jest częścią pakietu , javac umieszcza plik klasy w podkatalogu odzwierciedlając nazwę pakietu, tworzenia katalogów, ile potrzeba. Na przykład, jeśli podasz -d c: \ myclasses a klasa nazywa com.mypackage.MyClass, plik nazywa klasa C: \ myclasses \ com \ mypackage \ MyClass.class.

0

utworzyć nowy katalog. To jest katalog zawierający twoją pracę i nie jest początkiem twoich paczek.

Na przykład tworzę folder/terri, aby rozpocząć.

Następnie utworzyć strukturę folderu/clarie/Andrea pod nią. Mój pakiet będzie nazywał się claire.andrea w tym przykładzie. Normalne nazwy pakietów zaczynają się od com, a następnie nazwę firmy lub coś podobnego (lub java dla standardowych pakietów java, więc nie używaj tego: jak java.lang. *).

W folderze Andrea utworzyć plik o nazwie java Saluton.java z klasą Saluton (który po prostu wydrukować cześć). Nazwa klasy i nazwa pliku muszą być zgodne.

Do kompilacji, z terri/folderu. Javac \ Claire \ Andrea \ Saluton.java Spowoduje to utworzenie Saluton.class w \ Terri \ Claire \ Andrea \ Saluton.class

Aby uruchomić: (znowu z/terri), robię: java -cp. claire.andrea.Saluton Który mówi, użyj ścieżki klasy z mojego bieżącego katalogu.
Mój główny program znajduje się w pakiecie claire.andrea, a nazwa klasy to Saluton.

Oto przebieg: \ terri java -cp. claire.andrea.Saluton

"Witaj świecie".

Podsumowując, nazwa pakietu jest zgodna z podstawową strukturą katalogów. Plik (jeśli odnosi się do pakietu) musi znajdować się wewnątrz struktury katalogu, do której się odwołuje. Jeśli skompiluję plik Saluton.java w/terri z pakietem claire.andrea Nie znalazłem sposobu na jego uruchomienie, to kompiluje się dobrze.

Ponadto nazwa pliku dla klasy musi być zgodna z klasą publiczną w tym pliku.

Aby uruchomić, package.Class. Zasadniczo pakiety nie są pisane wielkimi literami i Klasy są.

Powiązane problemy