Windows - Implementér et Java-program med en enkelt instans

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg er ikke sikker på om det er et Windows- eller Java-spørgsmål.


Jeg har en Java-applikation, der kører under Windows. Jeg har tilknyttet en bestemt filtypenavn (f.eks. .Xyz) med min ansøgning, så når jeg dobbeltklikker på en .xyz-fil, startes min Java-applikation, og hovedmetoden () ser .xyz-filen som dets første argument.


Men når jeg klikker på en anden .xyz-fil, lanceres en ny forekomst af Java-applikationen. Jeg foretrækker den eksisterende ansøgning til at håndtere den nye fil.


Er der en standard måde at gøre dette på, eller skal jeg programmere det fra bunden?


Hvis sidstnævnte er tilfældet, antager jeg, at jeg skal gøre noget som dette: Når anden gangs ansøgning lanceres, kontrollerer den, om en anden instans allerede kører (hvordan?), Åbner et kommunikationslink til den første instans, og passerer navnet på filen. Ret?

Bedste reference


Her er den ene tilgang:


Når dine main() brande åbner den først en bestemt port og lytter til andre (efterfølgende) open-file handlinger.


Hvis porten allerede er åben, betyder det, at der er en anden instans, der kører, så åbner du en stikkontakt til den allerede kørende instansens lytteport og giver den tilstrækkelig information til at fuldføre behandlingen og derefter afslutte.

Andre referencer 1


Her er pseudo-Java-koden.


try {
    // start as non daemon service.
    new FileNameListener(new ServerSocket(KNOWN\_PORT)).start();

} catch (BindException alreadyRunning) {
    // don't start a new service
}
// send to service, which could be the one just started.
sendFileName(new Socket("localhost", KNOWN\_PORT), filename);

// finish the current thread, i.e. exit if no service is running.

Andre referencer 2



  • For et WebStart-program skal du bruge SingleInstanceListener og SingleInstanceService.

  • Ellers har du flere muligheder:


    • Prøv dette for en enkelt Java-applikationsinstans

    • Kontroller for en eksisterende proces (eller allerede bundet stikkontakt) dig selv at registrere den kørende app og kommunikere med den (via socket eller IPC) for at videregive de argumenter og input, du ønsker.




Læs også svarene på dette nøjagtige duplikat af dit spørgsmål: [6] [7] [8]



  • Sådan implementeres en enkelt forekomst Java-applikation?


Andre referencer 3


Se JWS-løsningen. Det bruger SingleInstanceService. JWS kan også erklære en interesse i en filtype. Se filservicedemoen. for mere info. [11]


Det vil fungere på Windows, * Nix & OS X (og giver mange andre fine implementeringsfunktioner).

Andre referencer 4


Du kan bruge JUnique bibliotek. Det giver støtte til at køre single-instans java-applikation og er åben kilde.


http://www.sauronsoftware.it/projects/junique/[12]


Se også mit fulde svar på Sådan implementeres en enkelt forekomst Java-applikation?