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.depackage
de.bastie.howto.lang.start;import
java.net.ServerSocket;import
java.net.BindException;import
java.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 class
OnlyOneStartimplements
Runnable{/** 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 int
portNumber =49152
;/** Die Methode vom Interface Runnable. */
public void
run () {try
{ OnlyOneStart.initServer(); }/* Wenn nun ein Fehler auftritt, dann beenden wir die Anwendung einfach. */
catch
(final
BindException serverIsRunning) { System.out.println("Die Applikation wurde bereits gestartet.
"); System.exit(1
); }catch
(final
IOException 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 void
initServer ()throws
BindException, IOException{ ServerSocket serverSocket =new
ServerSocket (OnlyOneStart.portNumber); serverSocket.accept (); }/** * Prüft, ob die Anwendung bereits gestartet wurde. */
public static void
checkApplicationRunning () { Thread t =new
Thread (new
OnlyOneStart()); t.start(); }/** * Und so können Sie diese Klasse verwenden... * @param ignored */
public static void
main (final
String [] ignored) { OnlyOneStart.checkApplicationRunning(); System.out.println("Init Applikation
"); } }