Skocz do zawartości

Problem Z Java


sufli

Rekomendowane odpowiedzi

na wstepie chcialem zaznaczyc ze jestem poczatkujacy, :)

zainstalowalem jave moge nawet skompilowac program ale nie udaje mi sie go odpalic w terminalu wyskakuje taka komenda:

 

"[root@localhost Desktop]# java HelloWorld.java

Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld.java

at gnu.java.lang.MainThread.run (libgcj.so.7)

Caused by: java.lang.ClassNotFoundException: HelloWorld.java not found in gnu.gc j.runtime.SystemClassLoader{urls=[file:./], parent=gnu.gcj.runtime.ExtensionClas sLoader{urls=[], parent=null}}

at java.net.URLClassLoader.findClass (libgcj.so.7)

at java.lang.ClassLoader.loadClass (libgcj.so.7)

at java.lang.ClassLoader.loadClass (libgcj.so.7)

at java.lang.Class.forName (libgcj.so.7)

at gnu.java.lang.MainThread.run (libgcj.so.7)

 

co z tym zrobic zeby dzialalo?

prosze o pomoc

z gory dzieki

Odnośnik do komentarza
Udostępnij na innych stronach

Ja nie programuje w javie, ale ciekawi mnie, jak właściwie kompilować/uruchamiać programy w niej napisane? Przykładowo kod z http://forum.fedora.pl/index.php?showtopic=10889

[15:48][~/programowanie/java/1]
[lszk@fedora]$ /usr/java/j2sdk1.4.2_12/bin/javac Main.java Kalkulator.java
[15:48][~/programowanie/java/1]
[lszk@fedora]$ /usr/java/j2sdk1.4.2_12/bin/java Main
Exception in thread "main" java.lang.NoClassDefFoundError: Main (wrong name: kalkulator/Main)
       at java.lang.ClassLoader.defineClass0(Native Method)
       at java.lang.ClassLoader.defineClass(ClassLoader.java:539)
       at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
       at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
       at java.net.URLClassLoader.access$100(URLClassLoader.java:55)
       at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
       at java.security.AccessController.doPrivileged(Native Method)
       at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
       at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
       at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
[15:48][~/programowanie/java/1]
[lszk@fedora]$ /usr/java/j2sdk1.4.2_12/bin/java Kalkulator
Exception in thread "main" java.lang.NoClassDefFoundError: Kalkulator (wrong name: kalkulator/Kalkulator)
       at java.lang.ClassLoader.defineClass0(Native Method)
       at java.lang.ClassLoader.defineClass(ClassLoader.java:539)
       at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
       at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
       at java.net.URLClassLoader.access$100(URLClassLoader.java:55)
       at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
       at java.security.AccessController.doPrivileged(Native Method)
       at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
       at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
       at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
[15:48][~/programowanie/java/1]
[lszk@fedora]$

Niby się kompiluje, ale jak toto uruchomić?

Odnośnik do komentarza
Udostępnij na innych stronach

Hmm wbrew pozorom to nie jest taka hop siup prosta sprawa :)

Najlepiej wrzuc ten kod do NetBeans'a, w nowym projekcie. Kazda klase public w osobnym pliku, czyli osobno Main i Kalkulator. Jesli wszystko zrobiles to wystarczy wcisnac F6 "run" i powinno dzialac.

Do tego dostajesz w katalogu <sciezka do katalogu projektu>/dist archiwum jar ktory mozesz odpalic spod konsoli piszac:

java -jar <plik.jar>

 

Jesli chcesz wszystko od zera majac tylko zrodla skompilowac i odpalic spod konsoli, to to powinno ci (_pomuc_ → pomóc) ORT:

http://one-jar.sourceforge.net/

man java

man javac - jest tu jakies howTo

 

Mnie nie udalo sie jeszcze tego dokonac bez ide, ale jak ci sie uda to skrobij o tym na forum. :)

 

pozdro

Odnośnik do komentarza
Udostępnij na innych stronach

Ja nie programuje w javie, ale ciekawi mnie, jak właściwie kompilować/uruchamiać programy w niej napisane? Przykładowo kod z http://forum.fedora.pl/index.php?showtopic=10889

# /usr/java/j2sdk1.4.2_12/bin/javac Main.java Kalkulator.java
# /usr/java/j2sdk1.4.2_12/bin/java Main

Niby się kompiluje, ale jak toto uruchomić?

Krótka piłka. Klasa znajduje się w pakiecie kalkulator - pierwsza linia kodu. Pokazuje to błąd:

Exception in thread "main" java.lang.NoClassDefFoundError: Main (wrong name: kalkulator/Main)

mówiący tyle co: "zapewne nie chodziło Ci o klasę, którą znalazłem (Main.class) ponieważ Ty miałeś na myśli klasę bez pakietu (Main) a ja znalazłem klasę z tą samą nazwą jednak w pakiecie kalkulator (kalkulator.Main)".

 

Rozwiązanie jest proste. Po skompilowaniu należy umieścić pliki .class w podkatalogu ./kalkulator, wyjść z tego katalogu i uruchomić:

# java kalkulator.Main

co oznacza uruchom klasę Main z pakietu kalkulator. Suma sumarum trzeba więc pamiętać, że pakiet jest synonimem katalogu.

 

Generalnie kompiluje się po prostu wszystko, przenosząc wynik do innego katalogu (opcja -o komendy javac). Przeważnie stosuje się podział na kody w katalogu src, natomiast pliki .class w bin. Tak robi np. Eclipse. NetBeans również jakoś podobnie.

 

Pewnie ktoś spyta - po co całe te pakiety? Niech spróbuje zapanować nad kodem aplikacji, która składa się z kilkuset klas. Co się robi dość często biorąc pod uwagę strukturę języka i jego obiektowość, co powoduje rozkładanie kodu na jak najmniejsze składowe oparte o interfejsy. Z drugiej jednak strony - w takich projektach raczej nikt nie bawi się javac. ;)

Odnośnik do komentarza
Udostępnij na innych stronach

rzabcio u mnie poszlo.

Zszedlem katalog wstecz i odpalilem:

devil@oaza /classes$ ls
kalkulator/  meta-inf/
devil@oaza /classes$ ls kalkulator/
Action.class  Kalkulator.class  Main.class
devil@oaza /classes$ java kalkulator.Main

 

I dziala. Brakowalo mi jednego szczegolu tutaj, dzieki :)

Jeszcze jedno pytanie: jak teraz to wrzucic recznie do jar'a tak zeby dalo rade odpalic przez java -jar nazwa.jar ?

Bo u mnie ciagle nie widzi klasy Main:

devil@oaza /classes$ jar cf arch.jar -m meta-inf/manifest.mf kalkulator/*.class
devil@oaza /classes$ java -jar arch.jar 
Exception in thread "main" java.lang.NoClassDefFoundError: Main

 

ps. meta-fm potrzebny tylko do jar.

manifest.mf:

manifest-Version: 1.0
Created-By: 1.4.2_02 (Sun Microsystems Inc.)
Main-Class: Main

 

pozdro

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...