Für diese Aufgabe gibt es verschiedene Ansätze. Mit dem Java SDK 1.4 und dem neuen Packet java.nio gibt es nunmehr auch die Möglichkeit eine Datei exklusiv zu "pachten". Für die Java SDK vor der Version 1.4 bietet sich jedoch insbesondere die nachfolgend dargestellte Möglichkeit an, einen Server zu initiieren.
all rights reserved © Bastie - Sebastian Ritter @: w³: http://www.Bastie.depackagede.bastie.howto.lang.start;importjava.net.ServerSocket;importjava.net.BindException;importjava.io.IOException;/** * Title: Make Java - How To * Description: Eine Anwendung nur einmal starten. * Copyright: Copyright © 2002 - free for all use * @author Bastie - Sebastian Ritter * @version 1.0.0.0 * * Diese Klasse ermöglicht das Kontrollieren und ggf. Verhindern eines * mehrmaligen Startes einer Anwendung auf einem Rechner. * Die Prüfung erfolgt über das Belegen eines Netzwerkport am Computer. Beim * jedem erzeugen einer Instanz dieser Anwendung wird versucht auf einem Port * einen ServerSocket zu erzeugen. * Beachten Sie, dass zu diesem Zweck das IP Protokoll auf Ihrem Rechner * installiert sein muss. */public classOnlyOneStartimplementsRunnable{/** Auf dem diesem Port wird versucht den Server zu installieren. Die Ports * sind jedoch nicht frei verfügbar. So sind die Ports von 0 bis 1023, auch * "Well Known Ports" genannt sind fest reserviert. * Der zweite Block beginnt bei 1024 und geht bis 49151 und ist von * jederman reservierbar. * Der für uns wichtigste Bereich beginnt jedoch bei 49152 und endet bei * 65535. Dieser Bereich wird als private bzw. dynamische Ports bezeichnet. */private static transient intportNumber =49152;/** Die Methode vom Interface Runnable. */public voidrun () {try{ OnlyOneStart.initServer(); }/* Wenn nun ein Fehler auftritt, dann beenden wir die Anwendung einfach. */catch(finalBindException serverIsRunning) { System.out.println("Die Applikation wurde bereits gestartet."); System.exit(1); }catch(finalIOException criticalError){ System.out.println("Schwerer Fehler"+criticalError.getLocalizedMessage()); System.exit(2); } }/** * Initiiert den Server oder wirft eine Exception, wenn * die Anwendung bereits gestartet wurde. * @throws BindException * @throws IOException */protected static voidinitServer ()throwsBindException, IOException{ ServerSocket serverSocket =newServerSocket (OnlyOneStart.portNumber); serverSocket.accept (); }/** * Prüft, ob die Anwendung bereits gestartet wurde. */public static voidcheckApplicationRunning () { Thread t =newThread (newOnlyOneStart()); t.start(); }/** * Und so können Sie diese Klasse verwenden... * @param ignored */public static voidmain (finalString [] ignored) { OnlyOneStart.checkApplicationRunning(); System.out.println("Init Applikation"); } }