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:
- 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.
- 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:
- A osztályról, hogy örökli az osztály szál.
- 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.
- Rendeljen osztály shutdown-csapda az alkalmazás.
- 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.
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