Bietet Java Mechanismen, um zu verhindern, dass eine Anwendung mehrmals gleichzeitig ausgeführt werden kann?
[Java] nur eine Anwendung gleichzeitig
-
-
Keine automatischen, nachdem das ja durchaus im Sinne des Erfinders sein könnte (zB bei Serveranwendungen).
-
Da gibt's ein paar Möglichkeiten ...
Spontan fällt mir ein:1)
Einen (dummy) Port belegen.
"Failed" die Socketcreation, ist es mit hoher Wahrscheinlichkeit eine zweite Instanz. (oder ein anderes Programm benutzt diesen Port, daher ist diese Mehtode eher hässlich)2) Filelocking -> (nio klassen)
Ein Dummyfile kreieren und "sperren".
Details siehe:
hierCode
Alles anzeigen// achtung: untested + exception handling selbst schreiben ;-) path="whatever"; FileInputStream f = FileInputSteam(new File(path+"lock")); FileLock theLock = f.getChannel().tryLock(); if (theLock==null) { // file kann nicht gelockt werden -> 2++te Instanz } else { // ok, erster start }
-
allerdings gibt es keine mechanismen die sowas automatisch erlauben weil man es einfach nie braucht... mir fällt zumindest kein fall ein wo es sinnvoll wäre dass man eine applikation schreibt die nur ein mal geöffnet werden kann
na gut einer fällt mir doch ein... sagen wir du willst zb für counter strike ne GUI schreiben zum editieren der cs config file.... -.-
das programm öffnet und liest die file automatisch ein um sie dann zu editieren und es hätte keinen sinn es ein zweites mal zu startenallerdings brauchst du dann keine dummy file/port weil du ja schon überprüfen kannst ob die config file geöffnet ist
aber wann schreibt man schon so applikationen die sich auf nu reine file/port/was auch immer beschränken also, wäre interessant zu wissen wieso du denkst dass du sowas brauchst
-
allerdings gibt es keine mechanismen die sowas automatisch erlauben weil man es einfach nie braucht... mir fällt zumindest kein fall ein wo es sinnvoll wäre dass man eine applikation schreibt die nur ein mal geöffnet werden kann
- Ein Browser, der statt einem neuen Fenster ein neues Tab im schon vorhandenen Fenster aufmachen soll
- Ein CD-Brennprogramm, das aus ersichtlichen Gründen nicht öfter als einmal laufen soll, statt dem Öffnen einer neuen Instanz wird die vorhandene fokussiert
- Ein Kalenderprogramm, das sowohl standalone als auch als Komponente einer PIM-Applikation gestartet werden kann, und aber nicht doppelt laufen soll, stattdessen soll der jeweils laufende Part aktiviert werden
- Ein System-Tray-Icon, bei dem es keinen Sinn macht, es zweimal offen zu haben
- usw. usf.Ja, es gibt Anwendungsfälle. Ja, es gibt Frameworks, die diese Funktionalität zur Verfügung stellen (ich kenne KDE mit KUniqueApplication). Wie man das in Java am besten macht, kann ich aber auch nicht sagen.
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!