Diskuze: Kdy se musí psát "System.exit(0);"?

Java Java Kdy se musí psát "System.exit(0);"?

Aktivity (1)
Avatar
Marty
Člen
Avatar
Marty:25. června 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. června 23:56
Avatar
Samuel Kodytek
Šéfredaktor
Avatar
Samuel Kodytek:26. června 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. června 5:47
Nahoru Odpovědět  +1 26. června 5:46
There is more than one way to screw it
Avatar
Samuel Kodytek
Šéfredaktor
Avatar
Samuel Kodytek:26. června 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. června 5:53
Nahoru Odpovědět  +1 26. června 5:51
There is more than one way to screw it
Avatar
Marty
Člen
Avatar
Odpovídá na Samuel Kodytek
Marty:26. června 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. června 6:28
Avatar
Odpovídá na Marty
Matúš Olejník:26. června 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. června 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. června 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. června 19:18
Avatar
Odpovídá na Marty
Matúš Olejník:26. června 20:48

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

Nahoru Odpovědět 26. června 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. června 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. června 21:27
Avatar
Robert Michalovič:28. června 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. června 7:07
Avatar
Marty
Člen
Avatar
Marty:28. června 20:40

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

 
Nahoru Odpovědět 28. června 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.