# Anwendung nur einmal Starten



## chriss_2oo4 (16. Mai 2008)

Hi,

ich möchte dass meine Java-Anwendung nur einmal gestartet werden kann. Wie kann ich das realisieren?
Suche hab ich schon verwendet, hab aber leider nichts gefunden.

Lg Chriss


----------



## The_S (16. Mai 2008)

Dann hast du nicht richtig gesucht ... :roll:

z. B. http://www.java-forum.org/de/viewtopic.php?t=40547&highlight=anwendung

Gibt auch noch eine Methode von LeX über RMI


----------



## EgonOlsen (16. Mai 2008)

Bisschen kompliziert, oder? Es geht auch viel einfacher über eine gelockte Datei:


```
FileOutputStream out = new FileOutputStream(lockFile);
FileLock lock = out.getChannel().tryLock();
```

Zum Entfernen des Locks einfach den Stream wieder schließen (und ggf. die Datei löschen)...oder die VM austreten, die das Lock hält.


----------



## foobar (16. Mai 2008)

Ich habe sowas auch mal implementiert. Die Anforderung war damals aber auch noch Parameter zu übergeben, um sich einzuloggen etc. Deshalb habe ich einen Socket implementiert, der auf 127.0.0.1 hört und dem man mit Hilfe einer simplen RPC-API Daten übermitteln kann.


----------



## The_S (16. Mai 2008)

Über ne gelockte Datei können die Anwendungen aber nicht mehr miteinander kommunizieren (falls z. B. der zuletzte gestartetn noch Parameter übergeben wurden), was aber das Ziel meiner Anwendung war  .


----------



## EgonOlsen (16. Mai 2008)

Das stimmt natürlich. Aber danach wurde ja auch nicht gefragt... :wink:


----------



## Gast (16. Mai 2008)

Stehe gerade vor einem ähnlichen Problem. Da ich mit Dateien in Java noch nicht gearbeitet habe. Wie prüfe ich denn ob ich die Datei "locken" kann bzw. ob diese bereits gelocked ist?

???
if (lock.isLockable()){

}


----------



## André Uhres (17. Mai 2008)

Vielleicht hilft dies: http://www.java-forum.org/de/viewtopic.php?p=350257#350257


----------



## L-ectron-X (17. Mai 2008)

Der gesamte Thread mit der RMI-Variante: http://www.java-forum.org/de/viewtopic.php?t=36864
Da ist auch eine ServerSocket-Version zu finden.


----------



## Guest (18. Mai 2008)

Hi,

ich will ja nicht merkern, aber irgendwas verstehe ich nicht:
Wieso soll ein Programm mit einer anderen Instanz desselben Programmes auf demselben PC kommunizieren, wenn dieses Programm nur einmal gestartet werden darf? Das wäre irgendwie ein Monolog... aber die ursprüngliche Anforderung des Frages war dahin gehend, dass das Programm nur einmal gestartet werden darf...

Grüße,
Andy


----------



## Guest (18. Mai 2008)

Ich hab den Thread nur überflogen, aber ich denke das ist so gemeint:
Beim starten des Programms schaust du per RPC nach ob bereits eine Instanz läuft, wenn ja setzt du den Startvorgang nicht fort sondern beendest die neue Instanz.
Auch mit nem Lock könntest du ja nicht verhindern dass das Programm gestartet wird, auch da gehts darum das Programm sofort wieder zu beenden wenn der lock nicht erreicht werden kann.


----------



## Illuvatar (18. Mai 2008)

Anonymous hat gesagt.:
			
		

> Hi,
> 
> ich will ja nicht merkern, aber irgendwas verstehe ich nicht:
> Wieso soll ein Programm mit einer anderen Instanz desselben Programmes auf demselben PC kommunizieren, wenn dieses Programm nur einmal gestartet werden darf? Das wäre irgendwie ein Monolog... aber die ursprüngliche Anforderung des Frages war dahin gehend, dass das Programm nur einmal gestartet werden darf...
> ...



Angenommen, ich habe z.B. ein Textverarbeitungsprogramm programmiert. Die verschiedenen Dokumente werden innerhalb des Programms in verschiedenen JInternalFrames oder so bearbeitet. Die Dateiendung habe ich per JDIC mit meinem Java-Programm verknüpft.
Jetzt ist das Programm und ein paar Dokumente schon offen. Wenn der User jetzt auf seinem Desktop noch ein Dokument anklickt, soll sich natürlich nicht eine neue Instanz des Programms öffnen, sondern ein neues JInternalFrame. Dann muss das startende Programm erkennen: Da läuft schon eine Instanz, und es muss der bereits laufenden Instanz den Dateinamen übergeben, damit die Datei dort geöffnet werden kann.


----------

