Zum Inhalt springen

Programm nur 1x ausführbar machen


uthred

Empfohlene Beiträge

Das Problem wirst du in Java nicht gelöst bekommen. Denn wenn dein Programm gestartet wird bekommst du einen Java Prozess im System unter dem es läuft. Wenn du dein Programm ein zweites mal startest bekommst du einen zweiten java Prozess dieser weiß aber von deinem ersten Prozess nichts und dann auch nichts von deinem Singleton in deinem ersten Programm.

Was möglich wäre, ist das du in deinem Programm schaust ob es schon einen Java Prozess mit deinem Programm gibt und dann dein zweites Programm nicht noch einmal starten. Das ist aber in meinen Augen keine saubere Lösung. Denn du musst ganz genau schauen das es wirklich dein Java Prozess ist denn es kann durchaus sein das es noch andere Java Prozesse gibt.

Weitere Möglichkeit ist du schreibst eine lock Datei. Hat aber den Nachteil das du auch dafür sorgen musst das diese Datei nach einem Programmabsturz wieder weg geräumt wird.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Gast runtimeterror

Die Methode mit dem Port setzt allerdings voraus, dass keine Firewall das blockiert, der Port nicht durch eine völlig andere Anwendung benutzt wird und dass überhaupt ein IP-Stack auf dem Gerät installiert ist. Mir wäre das zu heikel.

Ich kann die Methode FileChannel.tryLock() auf eine bestehende Datei empfehlen - da sehe ich keinerlei Nachteile.

Nachtrag:

Der verlinkte Code spezifiziert keine IP-Adresse - wenn sich zwischen den beiden Anwendungen das Default-Adapter ändert, dürfte das meinem Verständnis nach nicht richtig funktionieren. Hierfür sollte man InetAddress.getLoopbackAddress() nutzen.

Bearbeitet von runtimeterror
Hinweis auf IP vs. Loopback eingefügt
Link zu diesem Kommentar
Auf anderen Seiten teilen

Gast runtimeterror

Prozesse auslesen bringt aber bei Java nichts, da sich die laufenden JVMs nicht unterscheiden lassen. Es gibt ein paar komplizierte Tricks, die JVM-Instanzen beim Start über einen Launcher entsprechend zu benennen - einfacher ist es jedoch auf einen Lock-Mechanismus des Betriebssystems zurückzugreifen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Methode mit dem Port setzt allerdings voraus, dass keine Firewall das blockiert,...

Das wäre mir eigentlich auch zu heikel, allerdings ist für das Programm sowieso eine Soketkommunikation vorgesehen, dafür werden schon Ports belegt (damit andere Programme mit diesem kommunizieren können) von daher gehe ich das Risiko einfach ein :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...