4. diel - Java spustenie - Programové argumenty
Dnešný článok o programových argumentoch voľne nadväzuje na sériu článkov Java kompilácie a build cez príkazový riadok. Predvedieme si ako pri spustení preniesť do programu nejaké informácie (vstupy), bez toho aby sme ich museli programu zadávať z klávesnice. To má napr. Výhodu, že náš program tak môže používať nejaký iný program, nie len človek s klávesnicou.
Spúšťač java
Na spustenie Java programov dochádza cez spúšťač (launcher)
Java.exe, ktorý sa nachádza v adresári \bin
v
JDK verziách Java 11+ či u starších verzií, kde je aj v JDK aj v JRE.
Dúfam, že nemusím vysvetľovať, že parametre pri spustení
nemožno odovzdať pomocou "double click" na spustiteľný
súbor jar
napr. Z plochy. Respektíve dá, ale museli by sme si
vyvinúť vlastnú spúšťač.
Nezabudnite mať nastavenú systémovú premennú
PATH
do adresára \bin
v JDK vo vašom počítači,
inak vám príkazy nebudú fungovať.
Ako volať spúšťač
Ukážme si ako sa spúšťač volá, najskôr všeobecne.
Spustenie .class
Univerzálna definícia príkazu java
vyzerá
vo všetkých verziách pre spustenie skompilované triedy .class
takto:
java [options] SpousteciTrida.class [args...]
Voliteľné parametre sú v definícii v hranatých zátvorkách, ktoré do príkazu potom reálne nepíšeme a nahradíme ich skutočnými parametrami.
Ostatné príkazy sa už môžu líšiť podľa verzie Javy, preto v prípade problémov na konci lekcie nájdete odkazy na dokumentáciu, kde sú popísané prípadné drobné zmeny.
Spustenie .jar
Ak máme program vo spustiteľnom .jar
súboru, potom
všeobecný príkaz vyzerá takto:
java [options] -jar Program.jar [args...]
Spúšťací trieda obsahujúce main()
metódu z
manifest.mf
sa načíta sama. Prípadne ju môžeme aj definovať
my a to takto:
java [options] -cp Program.jar package.PublicClass [args...]
Význam parametrov
Poďme si popísať, čo jednotlivé časti príkazu označujú:
java
- Operačnému systému hovoríme, že voláme spúšťač (launcher)java
, a ďalšie príkazy sú už parametre volania.-jar
- Hovoríme, že sa musí spúšťač pokúsiť nájsť v súbore manifeste meno spúšťacie triedy.[options]
- Voľbyoptions
sú argumenty JVM.[args...]
- Voľbyargs
sú parametre / argumenty programu, ktoré možno odovzdať programu, aby ich počas svojho behu využíval.Program.jar
- Cesta k spustiteľnému Java programu.-cp
- Označujeclasspath
, pri spúšťaní Java programu bude použité manuálne zadanie triedy (tzn.public class
) použitej v programe.package.PublicClass
- Označenie balíčka a triedy obsahujúce spúšťacie metódumain()
(tzn.public static void main(String [] args)
).
Z logiky veci teda vyplýva, že v jednom spustiteľnom jari môžete mať viac spúšťacích tried, alebo i viac spúšťacích metód.
Príklady
Predvedieme si spustenie programu ako spustiteľného súboru
jar
na príkladoch, čo sme si vytvorili v prvých lekciách kurze.
Existujú teda dva spôsoby spustenia. Variant s parametrom
-jar
a variant s parametrom -cp
.
-jar
V prípade prvého variantu stačí len názov programu a spúšťač si sám
nájde spúšťací triedu ProgramJava.class
definovanú v
manifeste:
java -jar Program.jar
-cp
V prípade druhom hovoríme spúšťačmi cez parameter -cp
, že
určíme spúšťací triedu, ktorá obsahuje metódu main()
v
triede ProgramJava.class
sami. Ak nepoužívame balíčky, vyzeral
by kód takto:
java -cp Program.jar ProgramJava
Ak by sme používali balíčky (packages), potom by spúšťací príkaz mohol vyzerať napríklad takto:
java -cp Program.jar balicek.ProgramJava
Odovzdanie argumentov programu
Parametre programu sú samozrejme oveľa jednoduchšie ako parametre JVM. Do
nášho Java programu nám prídu ako časť poľa String [] args
,
ktorú poznáme z hlavnej spúšťací metódy main()
vo
spúšťací triede.
Vytvoríme si jednoduchý program, kde parametre programu využijeme. Program
bude súboru ArgumentyProgramu.java
:
public class ProgramJava { public static void main (String [] args) { System.out.println("Start Programu"); System.out.println("Pocet argumentu :" + args.length); for (String arg : args) { System.out.println("\t" + arg); } System.out.println("Argument 1 : " + args[0]); System.out.println("Argument 3 : " + args[2]); System.out.println("Argument 5 : " + args[4]); System.out.println("Argument 6 : " + args[5]); System.out.println("Konec Programu"); } }
Parametre sú teda reťazca, takže ak ich budete chcieť využívať ako napr. Čísla, je nutné ich naparsovat do vhodnejších dátových typov.
Ako vidíte, zdrojový kód je skutočne triviálne. V prvej časti sa nám
vypíše koľko máme argumentov, potom v cykle je vypíšeme všetky a potom si
vypíšeme iba niektoré, ktoré sme si definovali. Len pripomínam že Java
počíta indexy u poľa od 0
a nie od 1
. Zdrojový
kód si samozrejme skompilujeme príkazom javac
, aby nám vznikol
ArgumentyProgramu.class
:
javac ArgumentyProgramu.java
a kód si spustíme napr. týmto príkazom:
java -cp . ArgumentyProgramu -x info -y test -help informace
Ako vidíte na priloženom obrázku kompilácie programu, jeho spustenie a beh je korektné:
Verzia dokumentácia Java
príkazu java.exe
Počas posledných 10 rokov došlo k určitým zmenám v rôznych verziách
spúšťače java.exe
. Preto pre istotu prikladám odkazy na
jednotlivé verzie Javy. Je vhodné si pre danú verziu ktorý používate
prezrú danú dokumentáciu:
- Java06 Dokumentácia
- Java07 Dokumentácia
- Java08 Dokumentácia
- Java09 Dokumentácia
- Java10 Dokumentácia
- Java11 Dokumentácia
- Java12 Dokumentácia
- Java13 Dokumentácia
- Java14 Dokumentácia
V budúcej lekcii, Java spustenie - JVM argumenty , si predvedieme využitie JVM parametrov.
Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 11x (1.02 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Java