/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Genstarte et java program
Fra : Daniel Jacobsen


Dato : 10-08-02 05:06

Hejsa!

Hvordan kan jeg få mit Java-program til at lukke ned og starte op igen??
(ved at trykke på en knap)

Mvh. Daniel J.



 
 
Filip Larsen (10-08-2002)
Kommentar
Fra : Filip Larsen


Dato : 10-08-02 12:39

Daniel Jacobsen skrev

> Hvordan kan jeg få mit Java-program til at lukke ned og starte op igen??

Start dit program fra en kommando fil du selv skriver (en .bat-fil under
Windows, en .sh-fil under Unix) hvori du hopper tilbage og genstarter hvis
en bestemt betingelse er opfyldt. Som betingelse kan du fx. benytte
returstatus fra programmet, dvs. du afslutter dit program med et kald til
"System.exit(RESTART_STATUS)" og tester for den værdi i dit shellscript.
Hvis værdien er 100 vil det i en .bat-fil vil det se ud som

restart:
javaw my.program
if errorlevel 100 goto restart

I stedet for returstatus kan du også benytte eksistensen af en (tom) fil som
signal til at genstarte, hvilke er en metode der ofte ses under Unix. Denne
fil slettes ubetinget lige før start af programmet, og der hoppes til
genstart hvis den er der når programmet er afsluttet. Bemærk, at denne
metode er svær at lave ordentligt hvis der er flere kørende instanser af
programmet samtidig.


En helt anden måde at genstarte dit program på, kunne være at skrive en
lille loader-klasse (helt med sin egen main metode) der via en ny
classloader instantiere og kalder main i den egentlige main-klasse.
Loader-klassen kan så fx. tilbyde en eller anden statisk metode igennem
hvilken dit øvrige program kan bede om en genstart. Når din main-klasse så
returnere fra main metoden, kan loader-klassen, hvis genstart er blevet
anmodet, instantiere en ny main-klasse og kalde main metoden en gang til. Er
genstart ikke blevet anmodet afslutter loader-klasse blot som normalt.

Fordelen ved denne metode er, at der ikke bruges tid på at genstarte JVM'en
og, at der ikke behøver blive skrevet nogen kommando-fil til at starte
programmet med (man starter blot med en et andet klassenavn). Ulempen ved
metoden er, at JVM'en ikke genstartes (!) og der derfor ikke nødvendigvis
bliver ryddet helt op i fx. åbne filer før efter genstart. Loader-klassen
kan selvfølgelig stimulere til og vente på oprydning, men pga. Javas garbage
collect model er der ingen garantier. Ulempen er også, at metoden er teknisk
noget mere langhåret at forstå, så hvis der er problemer kan det være svært
at se hvad der er galt.

Metoden med at starte en klasse via en ny classloader er ofte benyttet i
programmer der skal kunne hente og køre en ny version af en plug-in uden at
genstarte hele programmet, så man kan sikkert med fordel snuppe noget fra
diverse open-source programmer med denne feature.



Med venlig hilsen,
--
Filip Larsen <filip.larsen@mail.dk>



Daniel Jacobsen (11-08-2002)
Kommentar
Fra : Daniel Jacobsen


Dato : 11-08-02 02:21

Hej!

Det lyder interessant det med en loader-klasse. Kunne du ikke vise lidt
eksempel-kode, som viser strukturen. Jeg ved heller ikke rigtig, hvordan jeg
tjekker for at main-klassen returnerer fra main-metoden, og hvordan "lukker"
main-metoden i main-klassen ?
Lige nu ser min applikation således ud:

class Application {
public Application {
// en masse
}

public static void main(String[] args) {
new Application();
}
}

Hvordan skal det se ud med en loader-klasse ?

Mvh. Daniel J.





Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408521
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste