A hirtelen bezárása java-alkalmazás elkerülése

Java: cikk hirtelen zárás Java-alapú alkalmazások: hogyan lehet elkerülni?

Sok esetben, akkor abban a reményben, hogy a felhasználó bezárja a „normál” alkalmazás az Ön számára. Például az első esetben, akkor adjon neki egy JButton alkatrész, kattintás után, amely akkor van szükség, és befejezi a műveletet és végzik közvetlenül az alkalmazásból. Másik lehetőség, hogy lógni egy ablak eseménykezelő, amely feldolgozza az eseményt windowClosing. Tomcat is használja a speciális batch-fájlt, amely lehet végrehajtani a jobb végén a kérelmet. Ugyanakkor köztudott, hogy a felhasználók nem olyan gyakran helyesen töltsék ki az alkalmazást. Meg tudják csinálni az összes alkalmazás, amit akarnak. Ezen túlmenően, a felhasználó egyszerűen zárja be a konzolt, vagy fejezze be a munkamenet és az operációs rendszer, miközben fedetlen az alkalmazás.







A Java, a „virtuális” gép leállt két módja van: először is, ha a kérelem érkezett a szokásos módon, azaz System.exit módszert hívták, vagy mikor volt az utolsó szál nem egy démon. Másodszor, ha a felhasználó hirtelen megszakítja egy „virtuális” gépeket, például úgy, hogy megnyomja a Ctrl + C vagy elhagyja a rendszert anélkül, hogy bezárná az előre működő Java alapú alkalmazás.

Szerencsére, a virtuális gép kell a következő két-fázisú műveletsornak, mielőtt feltölti magát:

  1. A virtuális gép megkezdi az összes regisztrált shutdown-csapda, ha egyáltalán megtörtént. Leállítás-csapdák - egy szál (szálak), amelyek keresztül érzékelhető futási osztályban. Mindezek csapdák indul és párhuzamosan zajlik mindaddig, amíg be nem fejezték a munkát.
  2. A virtuális gép összes definiált Lezárás-működés (adott esetben).

Ebben a cikkben nézzük meg az első bekezdésben, mert lehetővé teszi, hogy a programozó puzzle „virtuális” Java-gép elvégzi a szükséges műveleteket befejezni a kérelmet. Shutdown-csapda - ez egyszerűen lemásolja a téma osztály származtatott osztályokban. Hogy létrehozza ezt a csapdát, amit tennie kell a következőket:

  1. A osztályról, hogy örökli az osztály szál.
  2. Elvégzésére végrehajtását run módszer az új osztályban. Ez a módszer tartalmazza a kódot, amely végrehajtható a munka befejezésekor „virtuális” gépeket, függetlenül attól, hogy az alkalmazás normális vagy nem fejeződött be.
  3. Rendeljen osztály shutdown-csapda az alkalmazás.
  4. Regisztráció csapda módszerével addShutdownHook jelenlegi esetben az osztály Runtime.

Mint látható, akkor nem kell futtatni az újonnan létrehozott szál csapdákat, ahogy fut, hogy egy másik osztály, örökli a Thread. Gondozó kezdete témára fekszik a „virtuális” gép, hogy fog teljesítéséhez shutdown-szekvencia indul minden regisztrált szálak csapdákat.

A kód az 1. lista egy egyszerű osztály és alosztály ShutdownHookDemo téma - ShutdownHook. Megjegyezzük, hogy fut ShutdownHook osztály módszer egyszerűen kiírja a húr „Kikapcsolás” a konzolon. Természetesen, ha nem tud teljesen olyan kódot, amit végre kell hajtani, míg elkészült az alkalmazás.







Elindítása után az állami szintű módszer az úgynevezett start. A start metódus létrehoz egy shutdown-csapda és regisztrálja azt az aktuális példány Runtime-osztály

A program ezután megvárja a felhasználó számára, hogy nyomja meg az Entert.

Amikor a felhasználó rákattint az Enter, hogy kilépjen a programokat. Mielőtt azonban a megjelenése „virtuális” gép elindul regisztrált shutdown-csapda, ami kinyomtatja a sorban a „Kikapcsolás”.

Egy másik példa, úgy véljük, egy egyszerű Swing-alkalmazás, a fő osztály neve MySwingApp. Ez az alkalmazás létrehoz egy ideiglenes fájlt indításkor. Amikor bezárja a fájlt törölni kell. A kód az alkalmazás látható a 2. lista.

A hirtelen bezárása java-alkalmazás elkerülése

2. listában.

Indításkor az alkalmazás meghívja a initialize metódus. Ez a módszer viszont létrehozza az aktuális könyvtárban a nevét egy ideiglenes fájl temp.txt.

Amikor a felhasználó bezárja az alkalmazást, az ideiglenes fájlt kell hagyni. Ebben az esetben, csak remélni tudjuk, hogy a felhasználó megnyomja a Kilépés gombot, majd nyomja meg a, majd az úgynevezett leállítás eljárás, amely törli az ideiglenes file. Azonban az ideiglenes fájl törlődik, amikor a felhasználó a program bezárására használja a rendszer az X alkalmazás ablak vagy bármilyen más módon.

3. lista egy olyan változatát mutatja ugyanezt a kérelmet, hogy megoldja ezt a problémát. Az új verzió az alkalmazás módosítja a kódot 2. lista, amelyben a shutdown-csapda. Osztály a csapdába úgy definiáljuk, mint egy belső osztály fő alkalmazási osztályban. Így kap hozzáférést az összes mezőt és módszereit az alap osztály. 3. listát, fuss csapda osztály módszer egyszerűen az, hogy a leállás módja a fő osztály. Ez biztosítja felhívását az alkalmazás befejezését.

3. listát.

Megjegyzés: a initialize metódus. Az első dolog, amit csinál - létrehoz egy példányt a belső osztály MyShutdownHook, amely örökli az Thread osztály.

Most, hogy van egy példánya MyShutdownHook nyilvántartásba vesszük azt Runtime keresztül addShutdownHook módszer:

A fennmaradó initialize metódus pontosan megfelel azonos eljárás 2. kódrészlet Ez a rész létrehoz egy ideiglenes fájl kimeneti vonal létrehozása „ideiglenes fájl”.

Most próbálja meg futtatni egy kis swing-alkalmazás. Győződjön meg arról, hogy az ideiglenes fájl törlődik minden esetben, bármilyen módon ne zárja be az alkalmazást.

Shutdown-csapdák, hogy mi tekinthető ebben a cikkben valójában az egyetlen helyes megoldás a kódex végrehajtása befejezésekor a kérelmet. És mivel nem lehet biztos benne, hogy a felhasználó ebben az időben, hogy csukja be a kérelmet - használatuk nagyban megkönnyíti az életét, biztosítva által meghatározott szabályok a befejezése a program.


Figyelmeztetés. mysql_connect () [function.mysql-csatlakozáshoz]: Nem lehet csatlakozni a helyi MySQL szerver segítségével socket '/tmp/mysql.sock' (2) A /pub/home/javaport/javaportal/books/show2b.php 11 vonalon

Figyelmeztetés. mysql_db_query () [function.mysql-db-query]: Nem lehet csatlakozni a helyi MySQL szerver segítségével socket '/tmp/mysql.sock' (2) A /pub/home/javaport/javaportal/books/show2b.php on 19. sor

Figyelmeztetés. mysql_db_query () [function.mysql-db-lekérdezés]: Egy link a szerver nem volt megállapítható a /pub/home/javaport/javaportal/books/show2b.php on line 19

Figyelmeztetés. mysql_fetch_array (): mellékelt érv nem érvényes MySQL eredmény az /pub/home/javaport/javaportal/books/show2b.php on line 30
Tudja meg, amit valójában gondol most itt.


[Hiba történt a feldolgozás ezen irányelv]


Figyelmeztetés. mysql_connect () [function.mysql-csatlakozáshoz]: Nem lehet csatlakozni a helyi MySQL szerver segítségével socket '/tmp/mysql.sock' (2) A /pub/home/javaport/javaportal/news/worldnews.php on line 91

Figyelmeztetés. mysql_db_query () [function.mysql-db-query]: Nem lehet csatlakozni a helyi MySQL szerver segítségével socket '/tmp/mysql.sock' (2) A /pub/home/javaport/javaportal/news/worldnews.php on vonal 93

Figyelmeztetés. mysql_db_query () [function.mysql-db-lekérdezés]: Egy link a szerver nem volt megállapítható a /pub/home/javaport/javaportal/news/worldnews.php on line 93

Figyelmeztetés. mysql_fetch_array (): mellékelt érv nem érvényes MySQL eredmény az /pub/home/javaport/javaportal/news/worldnews.php on line 95