Nejde spustit v příkazovém řádku – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Nejde spustit v příkazovém řádku – Java – Fórum – Programujte.comNejde spustit v příkazovém řádku – Java – Fórum – Programujte.com

 

sedygrizly
~ Anonymní uživatel
12 příspěvků
11. 1. 2014   #1
-
0
-

Zdravím.
V Java jsem víceméně úplný začatečník, kdysi jsem něco uměl, ale teď jedu zase od začátku. Bohužel jsem narazil u klasického programu Ahoj světe při pokusu spustit ho v příkazovém řádku. Nefunkční javac jsem vyřešil nastavením Path v systémových proměnných. Když jsem se pak pokusil pomocí "java" spustit aplikaci, dostal jsem chybu "Exception in thread "main" java.lang.NoClassDefFoundError....". Opět jsem zagooglil, přečetl něco o "classpath", zkusil jsem použít na spuštění java -cp, nepomohlo, tak jsem nastavil classpath takto: "***\jdk1.7.0_45\lib". (tady fakt nevím jestli odkazuju na správnou složku, moc jsem ten classpath nepobral). Po nastavení classpath mi to při pokusu o spuštění hodilo chybu "could not find or load main class AhojSveteApp". Zkoušel jsem ten java soubor hodit do té složky co mám nadefinovanou v classpath a spustit ho tam, nebo v classpath nastavit druhou cestu k tomu java souboru...bez výsledku. Samozřejmě tu aplikaci spouštím ve složce, kde ten soubor je, název opisuju správně. Samotné programování mám rád a dokážu si poradit, ale tyhle věci okolo moc nezvládám :(.. určitě to bude nějaká prkotina. Byl bych hrozně vděčný za pomoc. Tyhle dvě chyby se na netu vyskytují často, ale pomocí classpath lidem ta chyba zmizí, ne že se změní v druhou :(.

PS: jinak samotný program funguje v netbeansu bez problému, takže je hádám správný...jen v příkazovém řádku mi nejde spustit.

Nahlásit jako SPAM
IP: 46.183.64.–
Kit+15
Guru
11. 1. 2014   #2
-
0
-

#1 sedygrizly
 Nesmí tam být přípona class.

java AhojSveteApp

Škoda, že jsi nedodal zdroják, možná máš chybu i v něm.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
sedygrizly
~ Anonymní uživatel
12 příspěvků
11. 1. 2014   #3
-
0
-

,Tak snažím se to spustit příkazem "java AhojSveteApp", žádnou příponu tam nikde nepíšu. Do složky jsem zkopíroval  AhojSveteApp.java, zkompiloval jsem to do AhojSveteApp.class, který se snažím spustit příkazem " java AhojSveteApp".

zdroják zde: 

package ahojsveteapp;


public class AhojSveteApp {


public static void main(String[] args) {
System.out.println("Ahoj, světe!");
}

}

Nahlásit jako SPAM
IP: 46.183.64.–
Kit+15
Guru
11. 1. 2014   #4
-
0
-

#3 sedygrizly
No vida, máme to! 

java ahojsveteapp/AhojSveteApp

Tohle mi funguje.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
sedygrizly
~ Anonymní uživatel
12 příspěvků
11. 1. 2014   #5
-
0
-

#4 Kit
Mně to bohužel nejde ani tak....

jinak teď jsem si všimnul, že mi ve zdrojáku oproti učebnici chybí "public AhojSveteApp() {

}"

ovšem po dopsání tohoto se nezměnilo nic..

Nahlásit jako SPAM
IP: 46.183.64.–
Kit+15
Guru
11. 1. 2014   #6
-
0
-

#5 sedygrizly
Možná máš ještě chybu v $CLASSPATH. Ta přeložená třída musí být v adresáři 

$CLASSPATH/ahojsveteapp/
Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
sedygrizly
~ Anonymní uživatel
12 příspěvků
11. 1. 2014   #7
-
0
-
Nahlásit jako SPAM
IP: 46.183.64.–
Kit+15
Guru
11. 1. 2014   #8
-
0
-

#7 sedygrizly
Vidím. Soubor "AhojSveteApp.class" máš v adresáři "C:\Java\" a přitom musí být v adresáři "C:\Java\ahojsveteapp\". Už jsem ti to psal.

BTW: Všiml jsem si, že jsi dopisoval 

public AhojSveteApp() {
}

což je prázdný (v našem případě zbytečný) konstruktor. Nevadí nám.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
sedygrizly
~ Anonymní uživatel
12 příspěvků
11. 1. 2014   #9
-
0
-

Zkoušel jsem "java ahojsveteapp/Ahojsveteapp" i jen "java AhojSveteApp" v obou složkách **/Java" i **/Java/ahojsveteapp/" (fakt netuším souvislosti tak zkouším všechno... myslel jsem že je jedno kde soubor je, a že se volá prostě názvem). Stále stejná chyba.

Nahlásit jako SPAM
IP: 46.183.64.–
Kit+15
Guru
11. 1. 2014   #10
-
0
-

#9 sedygrizly
Ten soubor AhojSveteApp.class musíš přesunout do podadresáře "ahojsveteapp" a pak teprve volat 

java ahojsveteapp.AhojSveteApp

Vůbec není jedno, kde ten soubor je. Musíš respektovat "package" na začátku definice třídy.

Můžeš také při kompilaci použít parametr "-d", který to udělá za tebe.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
sedygrizly
~ Anonymní uživatel
12 příspěvků
11. 1. 2014   #11
-
0
-

#10 Kit
jasné, ten soubor jsem tam přesunul.

Jako nevím no, používám knížku Java 6 výukový kurz a tam ty složky a názvy mají úplně stejně jak já. Škoda že to CD se vzorovými soubory nemůžu najít.. :(..by mě zajímalo jestli by šli vůbec pustit.

BTW: doufám že u těhle základů je jedno že se učím podle knížky Java 6 a na kompu mám Java 7. Rozdíly jsem zatím nezkoumal (což jsem asi měl)...

Nahlásit jako SPAM
IP: 46.183.64.–
Kit+15
Guru
11. 1. 2014   #12
-
0
-

#11 sedygrizly
Takže už to jede?

Rozdíly mezi 6 a 7 nejsou velké. Sedmička umí o něco víc a měla by být kompatibilní, tzn. programy pro 6 by měly jít přeložit i pro 7.

Také jsem si tím prošel a také mi chvíli trvalo, než jsem si patřičně vytunil Vim a Makefile tak, aby mi to fungovalo automaticky. Když pochopíš souvislosti, je to jednoduché.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
sedygrizly
~ Anonymní uživatel
12 příspěvků
11. 1. 2014   #13
-
0
-

Ne, nejede.

Nahlásit jako SPAM
IP: 46.183.64.–
Kit+15
Guru
11. 1. 2014   #14
-
0
-

#13 sedygrizly
V tom případě máš něco blbě.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Flowy0
Věrný člen
12. 1. 2014   #15
-
0
-

neviem co by ti vypisoval cmd line ale myslim ze ked si zmenis lib na bin tak by si to nemal pokazit

http://docs.oracle.com/javase/tutorial/essential/environment/paths.html

najlepsie bude asi preinstalovat celu javu (dneska som to spravil a nemusel som vobec nastavovat cesty)

Nahlásit jako SPAM
IP: 95.102.35.–
https://github.com/Flowy
sedygrizly
~ Anonymní uživatel
12 příspěvků
12. 1. 2014   #16
-
0
-

po změně lib na bin žádná změna, furt stejná chyba.

Po přeinstalaci Javy  už mi nefunguje ani javac prvně bez PATH, potom i s nastaveným PATH.... já se snad budu muset učit jiný jazyk.. :(

Nahlásit jako SPAM
IP: 46.183.64.–
Kit+15
Guru
12. 1. 2014   #17
-
0
-

#16 sedygrizly
Nakonec to bude nějaká prkotina, jako např. kompilace s parametrem "-d .". Nebo se to ve Windows píše "/d ."? Teď nevím. Ohledně Javy na Windows ti moc neporadím, protože s Windows nedělám.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
NotBegiiner
~ Anonymní uživatel
2 příspěvky
12. 1. 2014   #18
-
0
-

A tu systémovu proměnou PATH máš nastavenou pro :

1) JDK?

2) JRE?

PATH by měla být nastavena cesta k souboru javac v JRE. (JRE = virtualni stroj Java)

PS. proč jsi ji zatím nevypsal? Já osobně si myslím, že máš špatně nastavenou cestu.

Nahlásit jako SPAM
IP: 217.112.161.–
Flowy0
Věrný člen
12. 1. 2014   #19
-
0
-

#18 NotBegiiner
to bude asi chyba ... on ju vypisal v tom obrazku ... ma ju nastavenu na lib v jdk ... musis ist do priecinka jre (jdk ho obsahuje alebo si stiahni jre java) a tam to nastavit na bin ... tam najdes ten spravny subor java ... ale mozno to nepomoze

Nahlásit jako SPAM
IP: 95.102.35.–
https://github.com/Flowy
sedygrizly
~ Anonymní uživatel
12 příspěvků
12. 1. 2014   #20
-
0
-

Takže..aplikaci s názvem javac mám v bin v JDK. Tam jsem měl předtím nastavený PATH, fungovalo to..po přeinstalu javy to fungovat prostě přestalo. Zkusil jsem PATH nastavit i na bin JRE, bez efektu. Co čtu v knížce i podle toho co mám na disku, javac je v JDK...

Upřímně vůbec nechápu, proč ta Java nechce chodit. Zkusil jsem nahodit starý ntb co jsem používal ve škole, kde mi vše fungovalo v poho, spokojeně jsem programoval, kompiloval a spouštěl... a od školy jsem tam nic neměnil. No a teď tam mám stejné chyby jako na tomhle PC. Mi přijde jak kdyby to dorazil nějaký update Java...ten na tom ntb proběhnout mohl.

Nahlásit jako SPAM
IP: 46.183.64.–
JoDiK
~ Anonymní uživatel
987 příspěvků
12. 1. 2014   #21
-
0
-

#13 sedygrizly
Taky jsem s Javou těžce bojoval a horko těžko se naučil vyrábět spustitelné programy. Největší chaos je ve složkách, jak to děláš po svém (jinak než to oni navrhli) tak to nefunguje... Taky byl problém, že co jsem přeložil ve verzi 7, nefungovalo v 6. CO překládám v 6, funguje i v 7.

Nakonec jsem si na to udělal mustr, který funguje.

Vyzkoušel jsem to na tom tvém příkladě a funguje to. Tak tady máš postup:

V nějaké složce (jejíž název může být libovolný) umístím všechny java soubory. V tvém případě to bude soubor AhojSveteApp.java s tímto obsahem (package není třeba, spíš přidělá potíže)

 


public class AhojSveteApp {


public static void main(String[] args) {
System.out.println("Ahoj, světe!");
}

}

Pak spustíš překlad do class příkazem:

"c:\Program Files\Java\jdk1.6.0_22\bin\javac" *.java

mohlo by se to přidat do PATH, ale pro mě je jednodušší napsat to jako bat soubor ve stejné složce.

A teď to nejdůležitější. O úroveň výš musí být umístěn soubor s manifestem. Jmenovat se může libovolně, třeba m1.txt a v tvém případě bude obsahovat toto:

Manifest-Version: 1.0
Created-By: 1.6.0_22 (Sun Microsystems Inc.)
Main-Class: AhojSveteApp

Až to budeš mít, vygeneruješ jar soubor následujícím příkazem (nejlépe zase bat ve stejné složce):

"c:\Program Files\Java\jdk1.6.0_22\bin\jar" cmf ../m1.txt ../AhojSveteApp.jar *.class

Pokud ten soubor nebude v jiné složce (například o úroveň výš), tak to prostě nebude fungovat!

No a pak stačí přejít o úroveň výš a spustit:

java -jar AhojSveteApp.jar

(složka s programem java.exe je v PATH)

Všechny příkazy spouštím v příkazovém řádku, abych viděl případné chybové zprávy.

Až je to odladěno, může se .jar soubor spouštět i přímo z Windows...

Nahlásit jako SPAM
IP: 88.103.233.–
NotBegiiner
~ Anonymní uživatel
2 příspěvky
12. 1. 2014   #22
-
0
-

Jsem se spletl. Cesta nemá být k javac.exe ale k java.exe.

I tak to ten problem neřeší. Naschvál jsem to vyzkoušel a dělá mě to taky. Neřešil jsem to protože všechno spouštím přes IDE, popř. přes *.jar a to mám nastavené přes ftype (*.jary mě double-clikem fungují např. z plochy.) Nicméně jsem to obešel tak že daný *.class soubor jsem nakopíroval do adresáře kde se nachází java.exe a program šel spustit obyčejným příkazem

java program

PS. ještě se na to večer kouknu a pokud přijdu na řešení jak to spustit přikaz java v jakémkoliv adresáři tak to napíši. Myslím že problém bude v systémových proměnných příkazového řádku. Přeci jenom éra DOSu už je skoro 15-20let mrtvá a kdo si to má pořád nastavení pamatovat.

Nahlásit jako SPAM
IP: 217.112.161.–
NotBeginer
~ Anonymní uživatel
3 příspěvky
12. 1. 2014   #23
-
0
-

Zjistil jsem že mě to dělá z toho důvodu že jsem tam měl definovaný package. Zkompilovaný soubor se mi objevil v adresáři balíčku a z toho adresáře mi nešel spustil. Pokud jsem smazal balíček, zkompilovaný soubor se objevil v adresáři stejném jako je zdroják a z toho adresáře mi to už spustit šlo.

Možná že v tom budeš mít problém.

Nahlásit jako SPAM
IP: 217.112.161.–
sedygrizly
~ Anonymní uživatel
12 příspěvků
12. 1. 2014   #24
-
0
-

Hele bez package mi ten soubor nefunguje v netbeansu....takže buď mi půjde jen v netbeansu nebo jen v příkazovém řádku? Javac konečne funguje, udělal jsem to tím bat souborem.

Teď válčím s vytvořením jaru, nějak mi ta příkazová řádka ty soubory nechce najít :D. BTW: dotaz úplného blbce, ty dvě tečky před tím názvem souboru znamenají, že to má hledat o složku výš? Samožřejmě jsem tam teda hodil celou cestu místo nich pro jistotu..jen se ptám. Tohle nakonec dokoumu snad, jen radši píšu kde teďka jsem, protože pomáháte takřka online :). Plánuju dokončit ten Jodikuv postup.

Nahlásit jako SPAM
IP: 46.183.64.–
JoDiK
~ Anonymní uživatel
987 příspěvků
12. 1. 2014   #25
-
0
-

#24 sedygrizly
ano, dvě tečky jsou o úroveň výš...

Nahlásit jako SPAM
IP: 88.103.233.–
sedygrizly
~ Anonymní uživatel
12 příspěvků
16. 1. 2014   #26
-
0
-

Tak jsem se do toho po kratší pauze pustil , ale stále nejsem na konci. Jar soubor vytvořím, ale při pokusu o spuštění dostanu chybu, že v tom souboru není Main manifest atribute.

No pak jsem našel, jak Jar soubor vygenerovat přímo netbeansem, čili tam by pak s manifestem problém být neměl. Jenže při pokusu o spuštění jar souboru vytvořeného Netbeansem dostanu chybu Unabble to acces jar file.. Jedinou radu, co sem zatím zjistil je pouštět to přímo se složky se souborem, což ale dělám a nejde. 

Ješte jsem zkusil vzít obsah manifestu z toho jar souboru vytvořeného netbeansem a zkopčit to do toho manifestu v texťáku. Furt mi hlásí no main manifest attribute. Přitom když ten .jar otevřu v netbeansu, tak tam ten manifest je....

Nahlásit jako SPAM
IP: 46.183.64.–
Kit+15
Guru
16. 1. 2014   #27
-
0
-

#26 sedygrizly
 

echo "Main-Class: SpouštěcíTřída" >aplikace.mf
jar cvfm aplikace.jar aplikace.mf *.class 
Nahlásit jako SPAM
IP: 195.113.151.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
JoDiK
~ Anonymní uživatel
987 příspěvků
16. 1. 2014   #28
-
0
-

#26 sedygrizly
To jsem taky zjistil, když jsem překládal v JDK 7.

Ve verzi JDK 6 to funguje.

Nahlásit jako SPAM
IP: 88.103.236.–
NotBeginner
~ Anonymní uživatel
185 příspěvků
25. 1. 2014   #29
-
0
-

 #28 JoDiK

Přestože používám IDE tak tento problém neřeším, nicméně našel řešení pro JDK7 ( i když do půl roku by mělo vyjít JDK8,že  ~~  )

obejít hlášku " main manifest atribute" jsem nalezl zde :

http://stackoverflow.com/questions/19250966/failing-to-run-jar-file-form-command-line-no-main-manifest-attribute

dle tvého návodu se musí na úrovni souboru s manifestem kde se zároven vygeneruje daný *.jar, spustí *.jar příkazem : ( kde AhojSveteApp.jar je nazev programu, AhojSveteApp  = public class )

java -cp AhojSveteApp.jar AhojSveteApp


PS. vyzkoušejte a řekněte, mě to funguje.

Nahlásit jako SPAM
IP: 217.112.161.–
NotBeginner
~ Anonymní uživatel
185 příspěvků
25. 1. 2014   #30
-
0
-

Zapoměl jsem že jsem manifest upravil takto :

Manifest-Version: 1.0
Created-By: 1.7.0_45 (Oracle Corporation)
Main-Class: AhojSveteApp

viz. http://docs.oracle.com/javase/tutorial/deployment/jar/defman.html

Pozn. nepooužívám package(balíčky). Pokud pracujete s balíčky je nutno upravit cesty s balíčky.

Nahlásit jako SPAM
IP: 217.112.161.–
sedygrizly
~ Anonymní uživatel
12 příspěvků
29. 1. 2014   #31
-
0
-

Božínku, konečně to funguje, děkuji NotBeginner. Jinak omlouvám se za pozdní reakce, teď sem neměl skoro žádný čas..

Nahlásit jako SPAM
IP: 46.183.64.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 23 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý