Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di pcg4m3s
    Registrato dal
    Aug 2007
    Messaggi
    244

    Avviare una sola istanza di un JAR eseguibile

    salve,
    ho realizzato una piccola applicazione in JAVA ed ho fatto il relativo JAR eseguibile.
    il problema è che se io avvio il JAR eseguibile e mi si apre l'applicazione, lasciandola aperta ed avviando di nuovo il JAR eseguibile, mi si aprono due istanze del programma e così via...
    qualcuno di voi sa come fare per fare in modo di aprire una sola istanza dell'applicazione togliendo la possibilità di aprire un'altra istanza finchè ce ne sta una aperta?
    grazie!

    PS: il JAR eseguibile l'ho creato con eclipse aggiungendo il plug-in FATJAR

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254

    Re: Avviare una sola istanza di un JAR eseguibile

    Originariamente inviato da pcg4m3s
    come fare per fare in modo di aprire una sola istanza dell'applicazione togliendo la possibilità di aprire un'altra istanza finchè ce ne sta una aperta?
    Si deve usare un qualcosa che sia "globale" e che occupi magari una risorsa di sistema non condivisibile. Ad esempio un file da lockare (i lock sui file sono gestibili da Java 1.4), un ServerSocket su una certa porta o altro.

    Più blandamente basterebbe verificare l'esistenza di un file, se non c'è si crea e si va avanti, se c'è già si chiude la applicazione. Chiaramente non è "atomico" e perfetto. Ma potrebbe bastare. A patto di cancellare il file alla fine (e questo può comportare altre questioni .... es. se la JVM va in crash ...).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Quoto in toto andbin, e personalmente preferisco l'uso di Socket proprio per quel problema di eventuali crash della JVM. "Qualche" tempo fa avevo anche postato un po' di codice... che oramai è finito nell'archivio dei vecchi thread...

    http://forum.html.it/forum/showthread/t-1092048.html
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  4. #4
    Utente di HTML.it L'avatar di pcg4m3s
    Registrato dal
    Aug 2007
    Messaggi
    244
    l'idea del socket non è male... solo che io non so se la porta che indico è effettivamente libera nel sistema sul quale si andrà ad eseguire l'applicazione.
    eppure deve esserci un metodo migliore...

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Esiste anche la possibilità di utilizzare del codice nativo, in particolare una libreria di terze parti che faccia il lavoro.

    Per Windows, ad esempio, c'è la libreria WInterface (non so se il link sia ancora attivo). Questa soluzione, ovviamente, fa perdere la portabilità alla tua applicazione.

    Ad ogni modo, la soluzione cross-platform che prevede l'utilizzo delle Socket è, senza dubbio, la migliore: basta utilizzare un numero di porta sopra il 1000, che non rientri fra quelli noti (8080, 3306, 5900, ecc).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.