Announcement

Collapse
No announcement yet.

Den Start eines Java-Programm's nur einmal erlauben

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Den Start eines Java-Programm's nur einmal erlauben

    Hallo,

    ich möchte gerne verhindern, das man ein Java-Programm auf einem PC zweimal ausführen kann.

    Wie kann man sowas hinbekommen??

    Gruß
    Klaus

  • #2
    Hallöchen,

    klingt mir nach einem typischen Fall für das Singleton-
    Entwurfsmuster. Die Klasse enthält statisch ein Instanz von
    sich selbst und wird somit nur einmal (pro VM) erzeugt.

    getSingleton() liefert dann immer die eine Instanz zurück.

    Bsp:

    class Singleton
    {
    private static Singleton singleton;

    private Singleton() {}

    public static synchronized Singleton getSingleton()
    {
    if ( singleton == null )
    {
    singleton= new Singleton();
    }
    return singleton;
    }
    }

    Deine Anwendung müßte dann also innerhalb eines solchen oder
    ähnlichen Konstrukts implementiert werden.

    Gruss, Van

    Comment


    • #3
      Das ist ja wohl mehr als daneben. Es geht ja darum eine Anwendung
      nur einmal pro Rechner zu starten. Eine primitive Möglichkeit wäre
      beim Start der Anwendung einen Wert in eine Datei zu schreiben zum
      Beispiel einen Timestamp.
      Wird nun die Anwendung ein zweites mal gestartet, dann wird diese
      Datei ausgelesen. Stellt die Anwendung fest dass ein Timestamp
      existiert beendet sie sich mit einem Hinweis. Die Anwendung die als
      erstes gestartet wurde muss allerdings diesen Wert (oder die ganze
      Datei) bei Programmende wieder löschen - auch im Falle eines Crashs

      Comment


      • #4
        Hallo,
        <p>
        die wohl sicherste Methode ist die, einen unbenutzten, unbekannten Port (am besten hoher Bereich >60000) zu verwenden, den man auf der Adresse 127.0.0.1 öffnet (java.net.SocketConnection) und in einem separaten Thread auf dieser Verbindung horcht. Beim zweiten Programmstart versucht das zweite Programm genau dasselbe und bekommt eine PortInUseException. Eine verfeinerung wäre es, ein kleines Protokoll zu implementieren, welches auch checkt, ob wirklich die entsprechende Anwendung auf dem Port horcht oder nicht ein anderes Programm. Bei einem anderen Programm muß man halt ausshandeln, wie man die Ports wählt, damit man "endlich" die entsprechende Instanz findet.
        <p>
        gruß<br>
        Hendrik Brande

        Comment

        Working...
        X