C# týden C# týden
Pořádné programy s pořádnou klávesnicí zdarma. Více zde
Pouze tento týden sleva až 80 % na C# .NET
Avatar
Marty
Člen
Avatar
Marty:25.6.2018 23:56

Dokázal by mi, prosím, někdo ve stručnosti říct, za jaké podmínky nebo kdy se v programu musí napsat System.exit(0);, aby program šel spustit? Zřídkakdy se mi po spuštění programu zobrazí, abych tam ten příkaz napsal, ale většinou ho po mně nechce.

 
Odpovědět 25.6.2018 23:56
Avatar
Samuel Kodytek
Šéfredaktor
Avatar
Samuel Kodytek:26.6.2018 5:46

Ahoj, System.exit(0) ti hned vypne program, například:

Scanner sc = new Scanner(System.in);

while(true) {
       System.out.println("Zadej exit pro vypnutí aplikace");
       String in = sc.next();
        if(in.equals("exit"))
           System.exit(0);
}

//... Další kus kódu

S tím whilem to je hodně špatný příklad, protože můžeš napsat tu podmínku do while(), ale pro ukázku to stačí

Řekněme, že máme z nějakého důvodu, while(true) a chceme po tom co uživatel zadá do konzole "exit" vypnout aplikaci... Nebo máme třeba GUI aplikaci a chceme po tom co uživatel klikne na tlačítko, aby se nám vypla celá naše aplikace. (Nějaké GUI knihovny mají svoje vlastní metody, které by se spíš měli používat, ale ne všechny to mají)

Slouží k tomu, kdyby jsi potřeboval vypnout tu aplikaci předem než kód dojde na konec mainu.

Editováno 26.6.2018 5:47
Nahoru Odpovědět  +1 26.6.2018 5:46
There is more than one way to screw it
Avatar
Samuel Kodytek
Šéfredaktor
Avatar
Samuel Kodytek:26.6.2018 5:51

Když zadáš jiné číslo než 0 jako parametr té metody, tak řekneš operačnímu systému, že aplikace nějak spadla.

https://stackoverflow.com/…xit1-in-java

Editováno 26.6.2018 5:53
Nahoru Odpovědět  +1 26.6.2018 5:51
There is more than one way to screw it
Avatar
Marty
Člen
Avatar
Odpovídá na Samuel Kodytek
Marty:26.6.2018 6:28

Díky za odpověď. :) Tohle je mi úplně jasný. Myslel jsem tento případ:

Scanner sc = new Scanner(System.in);

while(true) {
       System.out.println("Zadej exit pro vypnutí aplikace");
       String in = sc.next();
        if(in.equals("exit"))
           System.exit(0);
}

//... Další kus kódu

System.exit(0); // bez tohoto mi program na jeho konci napíše nějakou chybu o exitu

Prý se to občas děje. A mě by právě zajímalo, jestli jde nějak předem odhadnout, kdy je to tam potřeba psát, aniž by na mě při spuštění musela vyskočit ta chyba.

 
Nahoru Odpovědět 26.6.2018 6:28
Avatar
Odpovídá na Marty
Matúš Olejník:26.6.2018 7:00

Zrovna v tomto prípade ti bude compiler hlásiť chybu unreachable statement pretože tam máš cyklus while z ktorého jediná cesta von ukonči celý program, takže to čo je za cyklom sa nikdy neudeje.

Taktiež by ti mohlo ukazovať nie chybu ale varovanie že si nezatvoril Scanner, takže niekde, kde už vieš, že nebudeš Scanner potrebovať by si mal zavolať sc.close() a uvoľniť prostriedky operačnému systému, prípade obaliť to do try with resources a Scanner sa uzatvorí automaticky.

Nahoru Odpovědět  +1 26.6.2018 7:00
/* I am not sure why this works but it fixes the problem */
Avatar
Marty
Člen
Avatar
Odpovídá na Matúš Olejník
Marty:26.6.2018 19:18

Půjčil jsem si kód pro uvedení příkladu, tohle nebyl ideální příklad, takže do třetice. :)
Abychom si tedy rozuměli , podobný jednoduchý příklad jsem na vlastní oči viděl. Někdy se musí poslední řádek odkomentovat, ale jindy nemusí.

int cisloCele = 5;
switch (cisloCele) {
        case 5: System.out.println("Cislo 5"); break;
        case 6: System.out.println("Cislo 6"); break;
        case 7: System.out.println("Cislo 7"); break;
}
//System.exit(0);
 
Nahoru Odpovědět 26.6.2018 19:18
Avatar
Odpovídá na Marty
Matúš Olejník:26.6.2018 20:48

Hmm neviem, možno keby si našiel celý kód na ukážku :D

Nahoru Odpovědět 26.6.2018 20:48
/* I am not sure why this works but it fixes the problem */
Avatar
Marty
Člen
Avatar
Odpovídá na Matúš Olejník
Marty:27.6.2018 21:27

Zkoušel jsem úplně to samé jako tady: https://www.youtube.com/watch?…, ale mně to žádnou chybu jako jemu neukazovalo, proto tento dotaz. :)

 
Nahoru Odpovědět 27.6.2018 21:27
Avatar
Robert Michalovič:28.6.2018 7:07
  1. to video je staré z roku 2012 ( Java 7 )
  2. Byl to bug z té doby ( https://stackoverflow.com/…-environment ), myslím že se mi to dělo párkrát taky ale už je to 6 let, kdo si takovou blbost má pamatovat.
  3. System.exit násilně ukončuje program, neboli dává na povědomí JVM že program je skončen a ten to řekne OS. Na tyto testovací programy to vůbec nepoužívej.
  4. K tvému původnímu dotazu : Piš ho tehdy když, potřebuješ ukončit program ( např. když uživatel zvolí volbu konce programu, objeví se kritická chyba znemožňující pokračování programu apod.. ). Ale protože zatím řešíš základní syntaxi, jedná se o věci mimo tvé aktuální možnosti, tak to nyní neřeš. Ono to jednou přijde.
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +1 28.6.2018 7:07
Avatar
Marty
Člen
Avatar
Marty:28.6.2018 20:40

Ok, díky za odpověď. :)

 
Nahoru Odpovědět 28.6.2018 20:40
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.