doppeltes Starten verhindern

Tharsonius

Bekanntes Mitglied
Hallo zusammen,

ich habe ein Problem, ich möchte verhindern, dass mein Programm 2 mal gestartet wird. Dummerweise habe ich derzeit keine Idee wie ich das machen kann.

Ich habe mir bereits überlegt, ob ich eine Datei ablege und beim beenden wieder lösche, aber wenn mein Programm aus welchen Gründen auch immer nicht sauber beendet, dann wird unter Umständen die Datei nicht entfernt.

Ich denke man müsste die laufenden Tasks abfragen und nach dem eigenen Programm durchsuchen und wenn schon eine Instanz läuft, dann gleich wieder beenden. Nur habe ich keine Ahnung wie ich das machen kann.

Oder hat jemand irgend eine andere Idee wie man das Problem lösen kann? Bietet Java da vielleicht sogar einen Mechanismus für, den ich derzeit nicht kenne?

Bin für Ideen dankbar.
 

nrg

Top Contributor
also ich habe das immer mit File (Java Platform SE 6) gemacht. Spricht da irgendwas dagegen? Weil in deinem Beispiel ist das ja anders gelöst.

edit: ok zitat API: "this method should not be used for file-locking, as the resulting protocol cannot be made to work reliably" hört sich schonmal nicht so gut an :). aber warum? also ich hatte damit nie Probleme (ausser ich hab die VM in der IDE abgeschossen).
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Naja, es reicht ja aber schon wenn es ein klein bisschen unzuverlässig ist, wiel du dann eben deine Applikation nicht mehr starten kannst, bevor du manuell die Datei gelöscht hast...

Deletion will be attempted only for normal termination of the virtual machine, as defined by the Java Language Specification.

ich weiß jetzt zwar selbst auch nicht was unter "normal" bzw "unnormal" fällt, aber kann mir ein Stromausfall / Absturz des OS oder eben so einen kill wie du ihn ansprichst schon als "unnormal" vorstellen.
 

FArt

Top Contributor
Es gibt Kombinationen von Portbelegungen und File-Locks mit Hearbeat Google hilft da weiter... bestimmt auch die Forensuche... ich glaube mich daran erinnern zu können, dass hier mal eine fertige Lösung gepostet wurde...
 
T

Tomate_Salat

Gast
ich hatte mir das Thema auch mal so angeschaut und die Seiten sind mir auch bekannt (ich hoffe zumindest sie noch richtig im Kopf zu haben :p).

Eine Möglichkeit wärde doch sicher noch: Einen Stream auf eine Datei öffnen und einfach nicht mehr schließen. In der Theorie kann ja kein anderes Programm dann mehr auf die Datei zugreifen => Das führt zur Exception => das führt zu einer Meldung gefolgt von System.exit.

Ist gerade so eine spontan-idee von mir :-/
 

FArt

Top Contributor
i
Eine Möglichkeit wärde doch sicher noch: Einen Stream auf eine Datei öffnen und einfach nicht mehr schließen. In der Theorie kann ja kein anderes Programm dann mehr auf die Datei zugreifen => Das führt zur Exception => das führt zu einer Meldung gefolgt von System.exit.

Ist gerade so eine spontan-idee von mir :-/

Tipp: klappt nicht. Begründung(en): weiß ich, sag ich aber nicht ;-)
 

Janus

Bekanntes Mitglied
Wie wäre denn die revolutionäre Idee, dem Anwender einfach zu erlauben, dein Programm so oft zu starten, wie er es lustig findet?
 

Tharsonius

Bekanntes Mitglied
Wie wäre denn die revolutionäre Idee, dem Anwender einfach zu erlauben, dein Programm so oft zu starten, wie er es lustig findet?

Ursprünglich wollte ich ein mehrfaches Starten nicht verhindern, leider hat sich aber herausgestellt, dass das mit der HSQL Datenbank Probleme gibt.

Bei meinem Programm handelt es sich um einen Turnierplaner und die Daten der Spieler, Teams, des Turniers und der einzelnen Runden werden in der Datenbank abgelegt. Beim Systemstart wird die Verbindung zur Datenbank aufgebaut bzw. eine angelegt, wenn keine da ist, beim Beenden wird die Datenbank wieder geschlossen.

Und leider hat die HSQL Datenbank ein Problem damit, wenn ich 2 mal öffne und dann 2 mal schließe. Das resultiert in einer Zerstörung der Daten, dummerweise. Daher tüftle ich zum einen derzeit an einem Backup System, möchte zu bestimmten Zeiten ein Backup anlegen (ist auch kein Problem, nur der Zeitpunkt ist noch unklar :) ). Zum anderen möchte ich aber doppeltes öffnen unterbinden und daher dachte ich daran, einfach doppelten Programmstart zu unterbinden.

Programm startet also, prüft ob es das erste ist, wenn nicht, Nutzer darauf hinweisen und beenden, wenn doch, dann normal arbeiten.
 

tme

Aktives Mitglied
edit: ok zitat API: "this method should not be used for file-locking, as the resulting protocol cannot be made to work reliably" hört sich schonmal nicht so gut an :). aber warum? also ich hatte damit nie Probleme (ausser ich hab die VM in der IDE abgeschossen).

Dateisystemsemaphorik läßt sich nicht sauber auf jedes Dateisystem abbilden. NFS beispielsweise wird scherzhaft auch als "Nightmare File System" bezeichnet, weil das Locking (und die Zugriffssicherheit) mehr schlecht als recht funktionieren.

Dein Programm kennt jedoch das zugrundeliegende Dateisystem nicht oder wertet dies nicht aus, so dass du dich auf ein Feature verläßt, was nicht zwangsläufig jedes Dateisystem hat (exklusiver Zugriff).
 

The_S

Top Contributor
Leute, wenn ihr Tipps gebt, lest doch bitte auch das schon gepostete und wiederholt nicht alles doppelt und dreifach ;) . Was noch nicht gesagt wurde, über FileChannel funktioniert das auch.

Das mit der HSQLDB ist komisch. Du setzt sie aber schon als Server ein!?
 
Zuletzt bearbeitet:

Tharsonius

Bekanntes Mitglied
Das mit der HSQLDB ist komisch. Du setzt sie aber schon als Server ein!?

Ich verwende den In-Process (Standalone) Mode.
Das heisst ich starte die Datenbank nicht extra als Server sondern starte die aus meinem Programm.

Außer meinem Programm muss auch kein anderes darauf zugreifen.

Ich muss gestehen, ich habe bisher auch keine Probleme gehabt, nur ab und an ärgert das halt etwas, wenn ich versehentlich 2 Instanzen meines Programms starte. Das kann nun aber auch an Eclipse liegen, weiss ja nicht in wieweit das da noch zwischen funkt...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Doppeltes Fenster Allgemeine Java-Themen 3
S log4j - doppeltes Logging Allgemeine Java-Themen 4
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
E Java .exe Datei mit args starten Allgemeine Java-Themen 2
Lukas2904 Automatisches starten des Programms Allgemeine Java-Themen 5
N jar File auf Mac mit Doppelklick starten Allgemeine Java-Themen 5
O Jar lässt sich auf bestimmten Pc nicht starten Allgemeine Java-Themen 18
I Threads AudioInputStream separat starten und beenden; parallel programming Allgemeine Java-Themen 2
G Jar lässt sich mit macOS nicht starten Allgemeine Java-Themen 9
Tommy135 Input/Output Application aus Java package starten Allgemeine Java-Themen 2
H Erste Schritte Ausführbare Dateien lassen sich nicht starten Allgemeine Java-Themen 5
ralfb1105 Classpath putty.exe aus JAR starten Allgemeine Java-Themen 37
ralfb1105 Starten Java App(s) (.jar) aus einem Java Programm Allgemeine Java-Themen 18
temi Java Programm aus einer DB laden und starten Allgemeine Java-Themen 2
F .jar erstellen und starten Allgemeine Java-Themen 15
E Mit Java ein Python Programm starten Allgemeine Java-Themen 20
D Compiler-Fehler Ich kann meinen Kompilierer nicht starten. Allgemeine Java-Themen 16
R probleme beim starten von jar unter linux Allgemeine Java-Themen 2
L Eclipse JavaFX Klasse starten programmatisch Allgemeine Java-Themen 1
V Endlosschleife mit Startbutton starten und Stopbutton stoppen Allgemeine Java-Themen 6
V JavaFX Fehler beim Starten einer Jar Allgemeine Java-Themen 7
A Javaagent auf WebApplication starten Allgemeine Java-Themen 0
B JAVA - mehrere Clienten gleichzeitig starten. Nicht bei Code! Allgemeine Java-Themen 3
T Starten vom Thread Allgemeine Java-Themen 3
A Linux: Native Library mit Rootrechten ohne Prozess mit sudo zu starten Allgemeine Java-Themen 1
K Problem: Java-Klasse mit mehreren Threads als eigenen Prozess starten Allgemeine Java-Themen 3
Thallius Neuen Prozess starten, der auch nach Beedingung des Starter-Prozesses weiterläuft? Allgemeine Java-Themen 5
P Threads Threads nicht gleichzeitig starten Allgemeine Java-Themen 3
Maxim6394 Jar Dateien starten nicht Allgemeine Java-Themen 7
C Mit Pc Awendungen auf Server starten Allgemeine Java-Themen 8
M Eclipse Eine xhtml aus einem JSF Projekt starten Allgemeine Java-Themen 2
Developer_X Java Applets in Browser starten Allgemeine Java-Themen 9
N GOM-Database Program - wie starten Allgemeine Java-Themen 0
F Java Anwendung Remote starten geht nicht Allgemeine Java-Themen 0
F Spiel lässt sich nicht aus GUI starten Allgemeine Java-Themen 5
P Starten einer Java .jar-Datei Allgemeine Java-Themen 0
J jar Datei per Doppelklick starten Allgemeine Java-Themen 6
D neuen Prozess starten und anwendung beenden. Allgemeine Java-Themen 3
B Webbrowser mit Proxy- Verbindung starten Allgemeine Java-Themen 6
K Spiele starten nicht richtig Allgemeine Java-Themen 2
M Problem beim Starten der Anwendung Allgemeine Java-Themen 3
B Java GUI via SSH starten... Allgemeine Java-Themen 5
S VLC + Lied über Java starten Allgemeine Java-Themen 17
R Java-Progamm über Icon starten unter Windows Allgemeine Java-Themen 9
C Ubuntu-VM Java starten Allgemeine Java-Themen 24
A Programm will nicht starten... Allgemeine Java-Themen 7
Hoppelmann JAR mit Libaries und Natives vom Programm aus starten Allgemeine Java-Themen 5
V .jar nicht zweimal starten Allgemeine Java-Themen 4
C Java Programm über SSH starten Allgemeine Java-Themen 16
Jackii Java Programm aus anderen Java Programm starten Allgemeine Java-Themen 20
A Javaprogramm als Windowsservice starten Allgemeine Java-Themen 4
C Threads ExecutorService shutdown abbrechen und service "starten" ? Allgemeine Java-Themen 3
J Explorer über Code starten Allgemeine Java-Themen 15
G Java Programm aus Java Programm starten Allgemeine Java-Themen 6
X Neuerdings ein Problem mit dem Starten von Jars Allgemeine Java-Themen 5
C .jar bei Login starten Allgemeine Java-Themen 7
D Java Excel API - Schreiben in Excel lässt sich nicht über Makro starten Allgemeine Java-Themen 18
A Jars oder JNLPs aus java code in gleicher JVM starten Allgemeine Java-Themen 2
N Internet Explorer mit bestimter Java Runtime starten Allgemeine Java-Themen 2
G mehrere Threads starten/stoppen Allgemeine Java-Themen 4
K Programm mit verschiedenen Parametern starten Allgemeine Java-Themen 2
S Applet maximiert starten Allgemeine Java-Themen 5
T Externes Programm auf anderem Bildschirm starten Allgemeine Java-Themen 3
F Externes Programm starten, Speicheraufwändig Allgemeine Java-Themen 7
C Java Anwendung nur einmalig starten Allgemeine Java-Themen 10
Q Java aus Java starten Allgemeine Java-Themen 21
E Anwendung starten Allgemeine Java-Themen 3
E Programm von Main Methode starten Allgemeine Java-Themen 9
L AccessControlException beim starten aus einem Shellskript Allgemeine Java-Themen 3
J Java-Klasse über Konsole starten Allgemeine Java-Themen 6
T Java Programm aus anderem Java Programm starten Allgemeine Java-Themen 13
J Eclipse Java Programm aus anderem Java Programm starten Allgemeine Java-Themen 14
H Swing jar-Dateien starten nicht auf konventionellem Wege. Allgemeine Java-Themen 6
Y Anwendung starten(JAR) - Entscheidung Konsole oder Swing Allgemeine Java-Themen 5
K Prozess starten, überwachen und beenden Allgemeine Java-Themen 4
P Thread starten / stoppen / neustarten Allgemeine Java-Themen 8
T Javaprogramm unter Linux auf bestimmten Kern starten/laufen lassen ? Allgemeine Java-Themen 22
P Windows Media Player starten / finden Allgemeine Java-Themen 2
K Starten eines Threads Allgemeine Java-Themen 13
C Beste Möglichkeit eine jar mit großem Heapspace zu starten ? Allgemeine Java-Themen 8
D Starten von Threads via JVM Allgemeine Java-Themen 7
C .jar unter Windows7 über den Explorer starten Allgemeine Java-Themen 6
M Java Programm als Dienst starten... Allgemeine Java-Themen 4
S Seperaten Thread starten Allgemeine Java-Themen 5
L Thread kurz unterbrechen und wieder starten Allgemeine Java-Themen 5
V Shellscript über ProcessBuilder starten Allgemeine Java-Themen 2
J Threads mehrmals starten Allgemeine Java-Themen 18
X Aus Java Applikation externes Programm starten Allgemeine Java-Themen 3
S Jar Datei mit mehr Speicher starten Allgemeine Java-Themen 2
L Jar File aus Quelltext heraus starten Allgemeine Java-Themen 9
M Java Klasse automatisch starten Allgemeine Java-Themen 3
E Zweites Java Programm sichtbar starten Allgemeine Java-Themen 4
C Name einlesen und Programm starten Allgemeine Java-Themen 2
B MVC: controller in unabhängigen thread von der view starten (gui friert ein) Allgemeine Java-Themen 5
L Externes Bash Script aus Java Datei heraus starten Allgemeine Java-Themen 2
V Java-Programm automatisch starten Allgemeine Java-Themen 2
M Jar starten per Doppelklick Allgemeine Java-Themen 4
$ Applikation(Left for Dead) mit Parametern Starten Allgemeine Java-Themen 5
V main(...) aus Klasse in PDF starten? Allgemeine Java-Themen 3
R Neuen Thread mit Verzoegerung starten..? Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben