Nur eine Instanz eines Programms zulassen, wie geht das?

Status
Nicht offen für weitere Antworten.

philo

Aktives Mitglied
hallo,

wenn man innerhalb eines Java-Programms nur eine Instanz einer Klasse haben will, benutzt man ja das Singleton Pattern, aber wie kann ich beim Aufruf eines Programms sicherstellen, das nur ein Programm läuft?

Gruss und Danke
philo
 
B

Beni

Gast
Du kannst eine Datei beim Start schreiben (oder locken), und diese Datei beim beenden wieder löschen (oder freigeben). wenn nun eine Datei existiert (oder gelockt ist), läuft schon ein Programm, und man bricht ab...
 

philo

Aktives Mitglied
nämlich wenn z.B. das Programme irgendwie unsanft beendet wird und dann die datei noch da ist. Der nächste aufruf des Programms würde abbrechen, da die Datei noch da ist.

gruss
philo
 
S

stev.glasow

Gast
Also ich mach das immer mit nem ServerSocket: beim programmstart verbinde ich einen Socket(Client) mit port xy.
Wenn dies gelingt übergebe ich erst dem ServerSocket evtl. nochein paar sachen (z.B.die Parameter die beim programm start übergeben worden sind, diese kann dann das bereits laufende Programm auswerten) und schließe dann das aktuelle Programm (das was zuletzt geöffnet wurde)
Und wenn die Verbindung fehltschlägt erstelle ich den ServerSocket und lasse das Programm laufen.
Bin mit dieser Lösung eigentlich ganz zufrieden, ob es da etwas besseres gibt weiß ich nicht.
- Hoffe das war einigermaßen Verständlich,
wenn nicht frage bitte noch mal nach.
[edit] achja es läuft natürlich alles über den localhost
 

philo

Aktives Mitglied
ah danke , also das erste programm baut den serversocket auf und verbindet sich mit ihm und meldet sich an und läuft. das nächste programm wird sich zum gleichen ServerSocket verbinden und da merkt der Server das schon was läuft. meldet das dem Programm und dieses fährt sich dann runter. War das so gemeint?

Kann es da nicht Probleme mit einer Firewall geben und wirken Firewalls nicht auf Zugriffe von Localhost auf Localhost?

Und welchen Port benutzt du? Der muss ja frei sein und jedes muss den gleichen benutzen!

Was ist, wenn keine TCP/IP protokoll installiert ist (das wird doch verwendet oder?)

Gruss

philo
 
S

stev.glasow

Gast
erstmal das was ich nicht weiß: """Was ist, wenn keine TCP/IP protokoll installiert ist (das wird doch verwendet oder?) """

Und dann das andere:
Also, richtig verstanden hast du's.
Und die firewall stört doch nicht weiter, dann muss der user der firewall eben sagen dass er diese verbinug erlauben soll, oder ist das mist?
Und ich verwende immer irgendeinen einen Port, am besten schön gross zb. 37862.
Oder(und) du bietest dem User an das er diesen Port in den erweitertten Einstellungen ändern kann.
 

akira

Bekanntes Mitglied
Hi,

also ich habe es nicht probiert, aber müßte es nicht reichen, eine System-Property zu setzen?
Also z.B:

Code:
String test = System.getProperty("myproperty","bla");
if(test!=null)
    System.setProperty("myproperty");
else {
    System.out.println("Nur eine Instanz erlaubt!");
    System.exit(0);
}
 
S

stev.glasow

Gast
Bleibt die nicht erhalten wenn das Programm beendet wird?
 

Grizzly

Top Contributor
philo hat gesagt.:
nämlich wenn z.B. das Programme irgendwie unsanft beendet wird und dann die datei noch da ist. Der nächste aufruf des Programms würde abbrechen, da die Datei noch da ist.

gruss
philo

Also in meiner Firma haben wir das so gelöst:
Eine Datei wird beim Start des Programms erstellt und gesperrt. Wir die Anwendung beendet, wir die Datei entsperrt und gelöscht. Bevor die Datei beim Start jedoch erstellt wird, wird geschaut, ob sie schon existiert. Tut sie das, wird versucht eine Sperre auf die Datei zu setzen. Sollte dies klappen, wird dem Benutzer gesagt, dass die Anwendung das letzte Mal nicht richtig beendet wurde, er aber trotzdem jetzt damit arbeiten kann (rein theoretisch könnte man hier auch ein paar Integritätstests laufen lassen - meist wird ja aber eh eine Datenbank verwendet, die das dann selber macht). Kann die Sperre nicht gesetzt werden, wird eine Meldung ausgegeben, dass das Programm schon läuft. Nach dem Bestätigen der Meldung wird dann das Programm geschlossen.
 

philo

Aktives Mitglied
hallo,

hast du vielleicht mal bitte einen kleinen Tipp, wie man so ein datei sperrt und entsperrt?
habe gerade was von FileLock und FileChannel gesehen. Benutzt ihr das? Ich verstehe nicht wo man da die Datei angibt, die gesperrt werden soll.

danke erstmal, das hört sich gut an. das klappt auch auf jeder Platform?

philo
 

Grizzly

Top Contributor
philo hat gesagt.:
hallo,

hast du vielleicht mal bitte einen kleinen Tipp, wie man so ein datei sperrt und entsperrt?
habe gerade was von FileLock und FileChannel gesehen. Benutzt ihr das? Ich verstehe nicht wo man da die Datei angibt, die gesperrt werden soll.

Du öffnest bspw. einen FileInputStream auf die Datei. Dann lässt Du Dir von dem FileInputStream per getChannel() den FileChannel geben. FileChannel besitzt zwei Methode tryLock(). Mit der einen sperrst Du die ganze Datei, mit der anderen nur einen bestimmten Ausschnitt. Als Rückgabewert bei einer erfolgreich gesetzten Sperre bekommst Du ein FileLock-Objekt. Mit der release() Methode des FileLock-Objektes entsperrst Du die Datei wieder.

philo hat gesagt.:
danke erstmal, das hört sich gut an. das klappt auch auf jeder Platform?

philo

Nein, nicht auf jeder. Nämlich nicht auf denen, die keine Dateisperre unterstützten. Java benutzt hier die Betriebssystem-Funktionen. Wobei mir spontan keine - zumindest aktuelle - Plattform einfällt, die das nicht implementiert hat. :)
 
R

Roar

Gast
kann mir jemand n link geben, wo erklärt wird was diese "Dateisperrung" überhaupt ist, macht und funktioniert? ich hab davon bisher auch nur in der Java API gehört :-/
 

Grizzly

Top Contributor
Roar hat gesagt.:
kann mir jemand n link geben, wo erklärt wird was diese "Dateisperrung" überhaupt ist, macht und funktioniert? ich hab davon bisher auch nur in der Java API gehört :-/
Du meinst ein Tutorial? Gute Frage ???:L . Habe bisher noch keines gesehen. Ich kenne das halt aus anderen Programmiersprachen. In C, Pascal und manchen Basic-Dialekten geht das (in anderen Programmiersprachen vielleicht auch, aber von denen weiss ich es halt ;) ).
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Nur eine Instanz eines Programms ausführen Allgemeine Java-Themen 3
B nur eine Instanz eines Programms laufen lassen Allgemeine Java-Themen 8
J Ist eine Instanz von einem bestimmten Object Typ? Allgemeine Java-Themen 6
flashfactor Prüfen ob bereits eine Instanz gestartet ist Allgemeine Java-Themen 2
G Nur eine Instanz einer Applikation Allgemeine Java-Themen 4
KonradN Mal eine Frage zu Binary Serialization Allgemeine Java-Themen 15
D Hat Java eine Library um JavaScript auszuwerten? Allgemeine Java-Themen 2
dokan wie kann ich eine funktionierende Suchleiste erstellen Allgemeine Java-Themen 1
B Wie erstelle ich dazu eine Abfrage ob der Button gedrückt wurde? Allgemeine Java-Themen 8
J Integration pay Pale in eine JavaFx Desktop Application Allgemeine Java-Themen 1
berserkerdq2 Wenn ich einfach eine GIF in den Scenebuilder als Bild reinpacke, wird das dann asl Gif angezeigt Allgemeine Java-Themen 1
8u3631984 Strukturiertes Logging : Jedes Feld in eine seperate Zeile - aber wie ? Allgemeine Java-Themen 2
berserkerdq2 Gibt es eine saubere Dokumentation von Jfoenix? Allgemeine Java-Themen 1
M Eigene Datenstruktur um eine Menge zu speichern Allgemeine Java-Themen 3
A Wie schreibe ich eine For-Schleife in ein Stream API um? Allgemeine Java-Themen 12
E Es ist nicht möglich, eine Batch-Anweisung auszuführen. Allgemeine Java-Themen 9
T Eine Frage des Designs Allgemeine Java-Themen 2
R Best Practice Erfahrungswerte für eine Migration von JSF nach Angular (oder anderes JS-Framework) Allgemeine Java-Themen 1
H Eine Linie verkürzen Allgemeine Java-Themen 5
N rekursion mehrfach eine Methode Öffnen Allgemeine Java-Themen 4
berserkerdq2 Wenn ich eine Methode nur jede 50ms ausführen will, wie mach ich das? Allgemeine Java-Themen 4
berserkerdq2 Wie synchronisiere ich eine for-Schleife Allgemeine Java-Themen 12
berserkerdq2 Wie mache ich in IJVM eine if verzweigung? Allgemeine Java-Themen 27
F Gibt es mittlerweile eine Alternative zu DaisyDiff Allgemeine Java-Themen 2
_user_q Was brauche ich, um eine eigene "Search for updates"-Funktion einzubauen? Allgemeine Java-Themen 1
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
LimDul Kam eine java.net.URL zu einer HashMap und ging als DNS Anfrage wieder heraus Allgemeine Java-Themen 18
pizza_dox_9999 Wie füge ich eine "eigene" ScriptEngine dem ScriptEngineManager? Allgemeine Java-Themen 3
F Kennt ihr eine Library um 2 HTML Seiten zu diffen? Allgemeine Java-Themen 8
Y ImagePanel von anderer Klasse in eine MainFrame Klasse hinzufügen. Allgemeine Java-Themen 1
OnDemand Anzeigen was eine Applikation macht Allgemeine Java-Themen 1
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
J Eine Frage zu den Threads und Task Allgemeine Java-Themen 1
Tobero Wie bekomme ich in welchem Quadrat sich eine Position in einem Grid befindet Allgemeine Java-Themen 11
Tobero Wie kann man eine Poisson Disc Sampler? Allgemeine Java-Themen 7
M Openjdk - gibt es auch eine Openjre? Allgemeine Java-Themen 7
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
S Noch eine Design-Frage zu Setter Allgemeine Java-Themen 6
N Arrayliste in eine Datei speichern Allgemeine Java-Themen 4
J Öffnen eine jar-Datei Allgemeine Java-Themen 11
Zrebna Gibt es eine Möglichkeit eine NPE zu vermeiden, wenn null returned wird? Allgemeine Java-Themen 3
S Klassen Einfügen von unbekannter menge an Variablen in eine Klasse mithilfe von ASM Allgemeine Java-Themen 5
R Wo müsste ich im Code eine Änderung vornehmen? Allgemeine Java-Themen 6
S Rückgabe einer HttpURLConnection für eine Seite einlesen bei der man eingeloggt ist..? Allgemeine Java-Themen 5
S Gibt es eine Moeglichkeit die Runtime Ausführung zu analysieren..? Allgemeine Java-Themen 7
S Habt ihr eine Idee wie man Serializierung testen kann..? Allgemeine Java-Themen 6
S Wenn eine Klasse zwei Interfaces mit derselben Methodensignatur implementiert: welche wird aufgerufen? Allgemeine Java-Themen 15
Drachenbauer warum bekomme ich hier eine NullPointerException Allgemeine Java-Themen 6
M Gibt es eine API die den aktuellen Wert eines Indikators beim Trading zurückgibt? Allgemeine Java-Themen 7
X Collections Gibt es eine Klasse welche die Vorteile von List und HashMap vereint, aber konstante Laufzeit (O(1)) hat in Java? Allgemeine Java-Themen 4
N Eine stelle der Fibonacci-Zahlenfolge ausgeben. Allgemeine Java-Themen 4
E Hat der Compiler einen Fehler oder warumbeendet return nicht eine Methode ? Allgemeine Java-Themen 7
W Collections Suche etwas Sorted-List-Artiges...hat jemand eine Idee? Allgemeine Java-Themen 13
L Methoden Über Reflections eine Methode mit aufrufen Allgemeine Java-Themen 3
S Kann ich eine Methode schreiben die alle Arten von funktionalen Interfaces akzeptiert..? Allgemeine Java-Themen 21
Drachenbauer Wie kann eine vorgegebene Farbe über einen String erkannt werden? Allgemeine Java-Themen 11
J Datenstruktur für eine Map erstellen Allgemeine Java-Themen 2
sascha-sphw Java 9 module Zugriff auf eine resource einer anderen JAR Allgemeine Java-Themen 0
pkm Kann eine ServerSocket-Klasse nicht stateful sein? Allgemeine Java-Themen 4
B Aufruf der Methode ergibt eine Exception Allgemeine Java-Themen 13
I Eine Anwendung so gut wie möglich beschützen Allgemeine Java-Themen 9
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
X Wie mache ich hier eine Rekursion rein ? Allgemeine Java-Themen 7
K OOP Suche Hilfe + Erklärung für eine Hausaufgabe Allgemeine Java-Themen 1
N Über einen Button in JavaFX ein Event über eine Pipeline schicken(Netty) Allgemeine Java-Themen 1
M Login in eine Webseite mit Java Allgemeine Java-Themen 3
A NetBeans Suche Programmierer für eine Belegarbeit Allgemeine Java-Themen 11
D Warum kann ich eine (deflaut) Klasse aus einer Libary in einem anderen Projekt benutzen? Allgemeine Java-Themen 3
L Übergabe an eine eher einfache Java- Applikation wegen Kündigung Allgemeine Java-Themen 1
C Ein Iterator ist eine Implementierung des Interface Iterable? Allgemeine Java-Themen 2
M Schlüsselworte Was ist eine Java Spezifikation + JSR? Allgemeine Java-Themen 11
E RMI NULL-Pointer-Exeception wenn der RMI-Proxy eine Methode deligiert Allgemeine Java-Themen 2
E RMI FWH: RMI- Wie erstelle ich stubs dynamisch, bzw. unterdrücke eine Statisch-Warnung? Allgemeine Java-Themen 0
J Eine bestimmte Zahl im Integer ändern Allgemeine Java-Themen 9
Q-bert Strings aus der JList in eine Datenbank speichern Allgemeine Java-Themen 1
D Möglichkeit mit GAE eine Table auszulesen und eine csv zu schreiben Allgemeine Java-Themen 22
S Korrekte Pfadangaben damit eine .jar Datei unter Windwos läuft. Allgemeine Java-Themen 24
D Eine Forschleife mit Threads abarbeiten um es zu schneller zu machen. Ist das möglich? Allgemeine Java-Themen 20
S Wie kann ich eine kleine Stelle in meinem Code mit multiplen Threads abarbeiten..? Allgemeine Java-Themen 20
B Gibt es eine Funktion die den Datentyp einer Variablen ermittelt? Allgemeine Java-Themen 8
R bei eclipse von java in eine andere programmiersprache wechseln? Allgemeine Java-Themen 2
D Pivot-Wahl beim QuickSort steigert die Effizienz, eine Lüge??? Allgemeine Java-Themen 17
C Eclipse einstellen, dass eine bestimmte JDK benutzt werden soll Allgemeine Java-Themen 3
M Klassen Eine Klasse in mehreren Klassen einbinden Allgemeine Java-Themen 11
A Best Practice Java - eine Art Plugin-Struktur Allgemeine Java-Themen 3
S wie rufe ich mit .jar datei eine .bat auf? Allgemeine Java-Themen 15
R Signatur von Methoden in eine Datei schreiben? Allgemeine Java-Themen 4
perlenfischer1984 Functionsparameter prüfen und eine Exception werfen !? Allgemeine Java-Themen 11
J Mehrere Wörter getrennt in eine Array einlesen, wie ? Allgemeine Java-Themen 7
E Methoden Hat jemand eine gute Lösung? Allgemeine Java-Themen 5
Z NullPointerException beim Schreiben einer ArrayList in eine Datei Allgemeine Java-Themen 6
Exdroid BlueJ Wie bekomme ich die Ausgabe in eine TXT Datei? Allgemeine Java-Themen 2
G Methoden Aus einem Event, wo ich weiß, dass es ausgeführt werden wird, eine Get-Methode basteln Allgemeine Java-Themen 8
F Wie kann ich auf einem System prüfen, ob eine lib verfügbar ist? Allgemeine Java-Themen 2
Tausendsassa Interface Eine Gui von einer anderen schließen lassen Allgemeine Java-Themen 3
S Threads Kann mir jemand helfen eine parallele Hilfsklasse zu implementieren..? Allgemeine Java-Themen 3
S Best Practice Brauche eine Idee für eine Java Projekt! Allgemeine Java-Themen 11
P Zwei ArrayLists: Ohne die eine überhaupt anzurühren, wird sie verändert Allgemeine Java-Themen 2
M Eine Datei im Speicher erneut laden(?) Allgemeine Java-Themen 1
V Gibt es eine Möglichkeit die Internet auslastung mit Java auszulesen Allgemeine Java-Themen 11

Ähnliche Java Themen

Neue Themen


Oben