IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

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ľby options sú argumenty JVM.
  • [args...] - Voľby args 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čuje classpath, 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ódu main() (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é:

argumenty Programu - Java - Pre pokročilých

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:

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

 

Všetky články v sekcii
Java - Pre pokročilých
Preskočiť článok
(neodporúčame)
Java spustenie - JVM argumenty
Článok pre vás napísal Robert Michalovič
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Programuji převážně v Javě SE,EE a trochu nativním C a CUDA. více viz.https://cz.linkedin.com/in/robert-michalovic
Aktivity