Java Anwendung nur einmalig starten

chalkbag

Bekanntes Mitglied
Hallo Community,

ich hätte keine Frage zu einer Problemstellung, sondern möchte eher euch um eure persönliche Meinung bitten.

Grundproblem: Eine Java-Anwendung darf nur einmal gestartet werden


Laut Java Blog Buch : D) Java-Anwendung nur einmal ausführen
gibt es typischerweise 2 Lösungsansätze.

- eine "Lockdatei" erstellen / löschen beim starten / beenden
- einen Port / Socket sperren

Beide haben Vor-/Nachteile. Allerdings ist der Artikel schon relativ alt.

So die Frage, wie macht ihr das, was empfehlt ihr und natürlich warum?

Wäre, wenn ich eh schon Files wie Property-Files habe, der Lock nicht auch über dem Write-lock zu realisieren? An sich kann ich ja nur einmal die Datei im Schreibzugriff öffnen, wird der Zugriff (beim Absturz) dann automatisch wieder freigegeben?

Würd mich über eure Meinungen freuen

Grüße

Staubbeutel
 
Zuletzt bearbeitet:

diel2001

Bekanntes Mitglied
Oder ein Singleton draus machen und schon kann das Programm nur einmal pro VM gestartet werden

Java:
public class Test{

private static Test instance;

private Test(){}

public static Test getInstance(){
 if(instance == null){
 instance = new Test();
}
return instance;
}
}
 
T

Tomate_Salat

Gast
aasdfasdf.jpg

wäre die 3te alternative.

schau mal hier im Forum, beliebt ist die Kombination aus beidem.
 

chalkbag

Bekanntes Mitglied
Schonmal danke für die Antworten

Laut meinem Link

... Wenn in Java ein Programm allerdings zwei mal ausgeführt wird, starten beide Programme in einer unterschiedlichen Virtual Machine, weshalb mit gewöhnlichen Methoden nicht festgestellt werden kann, ob die Anwendung bereits läuft oder nicht. ...

Würde die Lösung von diel2001 ungeeignet machen?

Bis Dato nutz ich eigentlich immer nur eclipse und ant um eine jars zu packen. Launch4J macht glaub ich eine exe drauß, welche dann kontrollieren kann ob es läuft oder nicht?
 
T

Tomate_Salat

Gast
ne diel2001's Vorschlag taugt garnichts. Wäre auch katastrophal wenn es so wäre!

Jup Launch4J erstellt eine exe, hat aber den Nachteil, dass die Platformunabhängigkeit verloren geht.
 

chalkbag

Bekanntes Mitglied
Danke Tomate_Salate,

dann wird es wohl auf das File und die Ports rauslaufen.

Schön das wir drüber gesprochen haben :applaus:
 

nrg

Top Contributor
und was spricht mit einem stream auf den properties? der stream geht mit sicherheit beim beenden unter und im gegensatz zum klassischen filelock auch bei einem stromausfall oder unnatürlichen beenden der jvm. ausserdem ist das im gegensatz zum portlock nicht nur auf eine systemumgebung beschränkt.
 
T

Tomate_Salat

Gast
Oder über NIO den FileLock:
Java:
import java.io.File;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;

import javax.swing.JOptionPane;


public class Demo 
{
	public final static String fileLock=System.getProperty("user.home")+File.separator+"frm.log";
	
	public static void main(String[] args) throws Exception
	{		
		FileChannel channel=FileChannel.open(Paths.get(fileLock),StandardOpenOption.WRITE,StandardOpenOption.CREATE);		
		FileLock fl=channel.tryLock();
		if(fl==null) {
			System.out.println("App is still running");
			System.exit(0);
		}
		
		JOptionPane.showMessageDialog(null, "MyUltimateApp");
	}
}
 

Tharsonius

Bekanntes Mitglied
und was spricht mit einem stream auf den properties? der stream geht mit sicherheit beim beenden unter und im gegensatz zum klassischen filelock auch bei einem stromausfall oder unnatürlichen beenden der jvm. ausserdem ist das im gegensatz zum portlock nicht nur auf eine systemumgebung beschränkt.

Ich habe die selbe Anforderung bei meinem Programm und dies bei mir mittels Socket gelöst. Klappt auch, aber Das mit dem Stream klingt interessant.

Kannst Du mir mal kurz erklären wie Du das meinst? Oder hast Du ein kleines Programmschnippsel parat?
 

chalkbag

Bekanntes Mitglied
Auch wenn die Idee nicht von mir war,

er geht eben z.b. mit einem BufferedWriter auf das File los, und gibt das File sozusagen erst wieder zurück, wenn er fertig ist.

Wenn jetzt Instanz 2 auch versucht, schreibend auf die Datei zuzugreifen, wird dies mit einer entsprechenden Meldung untersagt.

Gelösst hab ich es jetzt wie von Tomate vorgeschlagen über das Lockfile, was wohl unterm Strich das gleiche machen sollte.

Mein Lockfile wurde bis jetzt automatisch immer wieder freigegeben, auch wenn ich vm etc. direkt ins Nirvana jage. Aber das sollte bei Dateizugriffe sicherlich ähnlich funktionieren.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Java Anwendung machen Anleitung Allgemeine Java-Themen 5
D Java Anwendung mit dll File Allgemeine Java-Themen 5
B JAVA Prozesse in einer eigenen Anwendung laufen lassen Allgemeine Java-Themen 9
B Web-Anwendung funktioniert mit Java 1.8, aber nicht mit Java 1.7 (auf Client) Allgemeine Java-Themen 5
D Java-Anwendung mit DB, GUI, etc. Allgemeine Java-Themen 3
F Java Anwendung Remote starten geht nicht Allgemeine Java-Themen 0
M Java Anwendung ausführen Allgemeine Java-Themen 5
U (Land-)Karten in Java Anwendung einbinden (GoogleMaps/OpenStreetMap) Allgemeine Java-Themen 7
S "Katalog"-Anwendung in Java eine gute Idee? Allgemeine Java-Themen 12
K Anwendung bringt JAVA Speicherfehler Allgemeine Java-Themen 11
W Java Anwendung in HTML Allgemeine Java-Themen 2
P Java Anwendung mehr Speicher zur Verfügung stellen?? Allgemeine Java-Themen 3
C Kontextmenü erweitern und mit Java Anwendung verknüfen. Allgemeine Java-Themen 3
D Java Anwendung in der Shell Allgemeine Java-Themen 5
R Ausführbare Java Anwendung Allgemeine Java-Themen 27
A Java-Anwendung "richtig" schließen ohne JVM zu beenden Allgemeine Java-Themen 2
G Weboberfläche für Java Anwendung? Allgemeine Java-Themen 10
F Hilfe beim Starten einer Java Anwendung unter Windows gesuch Allgemeine Java-Themen 8
L Java 1.5 - Anwendung unter 1.6 JRE sehr langsam geworden Allgemeine Java-Themen 8
C Java-Anwendung beenden Allgemeine Java-Themen 3
G Auslesen mit welcher Java-Version Anwendung kompiliert wurde Allgemeine Java-Themen 2
G java als anwendung? Allgemeine Java-Themen 11
G Java Anwendung für Multi-User Allgemeine Java-Themen 2
N Linux-Commands über Java Anwendung ausführen Allgemeine Java-Themen 12
M Java-Anwendung von CD-ROM Allgemeine Java-Themen 19
C JAVA Anwendung - Was muss auf dem Server installiert sein? Allgemeine Java-Themen 6
S Java anwendung stürzt ab! Allgemeine Java-Themen 3
M PDF aus Java-Anwendung heraus steuern Allgemeine Java-Themen 5
BFreakout Hilfe! Java Anwendung läuft nicht. Allgemeine Java-Themen 8
L Java Anwendung Sprache auswählen? Allgemeine Java-Themen 2
F lizenzfreie Datenbank für JAVA-Anwendung Allgemeine Java-Themen 3
L JDBC Erklärung zu einer Java Anwendung Allgemeine Java-Themen 2
R Java-Anwendung kommerziell verteilen Allgemeine Java-Themen 3
V Java fertige Anwendung an einem Rechener ohne java install. Allgemeine Java-Themen 4
G Java Anwendung in Jar startet nicht Allgemeine Java-Themen 7
N Aus Anwendung zweite Java-Anwendung öffen. Wie? Allgemeine Java-Themen 6
G Java-Anwendung mit DB ohne Entwicklungsumgebung startbar? Allgemeine Java-Themen 5
L Windows-Anwendung aus Java-Programm starten Allgemeine Java-Themen 2
G portierung einer DOS Anwendung mit dbase - Dateien nach JAVA Allgemeine Java-Themen 3
T Anwendung von Java aus starten Allgemeine Java-Themen 3
M von der application zur einfachen java-anwendung Allgemeine Java-Themen 4
OnDemand Java Deployment Vaadin Allgemeine Java-Themen 3
D Hat Java eine Library um JavaScript auszuwerten? Allgemeine Java-Themen 2
Zrebna Wieso sind eigentlich JUnit-Tests in src/test/java platziert - nur Konvention? Allgemeine Java-Themen 7
N LlaMA, KI, java-llama.cpp Allgemeine Java-Themen 39
V Java-Codierungsherausforderung: Navigieren durch die Macken der Datumsmanipulation Allgemeine Java-Themen 2
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
M java: unexpected type Allgemeine Java-Themen 2
harrytut Java Input/Output Tests Junit Allgemeine Java-Themen 3
B Java Discord bot auf ein Root Server? Allgemeine Java-Themen 1
BetziTheRealOne Java PKIX path building failed as non Admin Allgemeine Java-Themen 15
D Linux, Java-Version wird nicht erkannt bzw. welche Einstellung fehlt noch? Allgemeine Java-Themen 19
KonradN Java 21 Release Allgemeine Java-Themen 5
V Umgang mit fehlenden Daten in einer Java-Datenanalyseanwendung Allgemeine Java-Themen 5
P Fehler: Hauptklasse Main konnte nicht gefunden oder geladen werden Ursache: java.lang.ClassNotFoundException: Main Allgemeine Java-Themen 24
G java.io.listFiles() Allgemeine Java-Themen 3
8u3631984 Frage zu Java Streams min / max Allgemeine Java-Themen 17
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
K Java-Projekt Allgemeine Java-Themen 11
K Java-Projekt Allgemeine Java-Themen 0
ruutaiokwu Welcher Browser unterstützt heutzutage noch Java Applets? Allgemeine Java-Themen 5
Jose05 Java-Klasse im extra cmd-Fenster ausführen Allgemeine Java-Themen 3
rode45e Java Threads Allgemeine Java-Themen 4
G java.io.listFiles() Allgemeine Java-Themen 2
N Java Dynamic Proxy Allgemeine Java-Themen 3
N Leichte Java Gegner Ki Allgemeine Java-Themen 10
A Java modul Problem Allgemeine Java-Themen 4
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
V Funktionale Schnittstelle in Java Allgemeine Java-Themen 3
OnDemand Java String in Hashmap als Key NULL Allgemeine Java-Themen 27
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
berserkerdq2 Wenn ich bei Intelij javafx mit maven importieren will, muss ich das in die pom.xml reintun, aber warum noch in module-info.java? Allgemeine Java-Themen 3
KonradN Java 20 am 21. März Allgemeine Java-Themen 1
O Java Website Stock Bot Allgemeine Java-Themen 3
J Front-/Backend in Java Allgemeine Java-Themen 14
doopexxx JAVA Google Webcrawler Allgemeine Java-Themen 1
J JavaScript innerhalb eines Java Projekts ausführen Allgemeine Java-Themen 2
A Java Programm erstellen hilfe Allgemeine Java-Themen 10
G java.lang.NoClassDefFoundError: org/aspectj/lang/Signature Allgemeine Java-Themen 2
lalex1491 Java Aktienkurse nachfragen Allgemeine Java-Themen 4
J Class to link Java Allgemeine Java-Themen 4
V Wie funktioniert das Schlüsselwort "final" von Java? Allgemeine Java-Themen 19
mrStudent Inferenz JAVA Allgemeine Java-Themen 6
U URI Rechner (Java Script) Allgemeine Java-Themen 7
TheSkyRider Java Geburtsdatum Textfeld Allgemeine Java-Themen 7
mihe7 Java 19 JavaDocs: Browserintegration Allgemeine Java-Themen 0
Encera Gleichzeitiges Ausführen und verbinden von 2 Java-Klassen über die Eingabeaufforderung und Eclipse Allgemeine Java-Themen 21
H Java Rechner Programmierung der Mathematik Allgemeine Java-Themen 33
Lennox Schinkel Java Kara Auf einen Java Host laufen lassen Allgemeine Java-Themen 17
C Fußnoten von DocX mit Java Allgemeine Java-Themen 2
C Fußnoten in DocX mit Java Allgemeine Java-Themen 1
M Aussagenlogik in Java Programmieren Allgemeine Java-Themen 22
B Per Java Word Dokument schreiben? Allgemeine Java-Themen 8
krgewb Java-Bibliothek für ONVIF Allgemeine Java-Themen 1
KonradN Oracle übergibt (Java Teile der) GraalVM Community Edition an OpenJDK Community Allgemeine Java-Themen 2
Momo16 Brauche Hilfe - Java Projekt kann nicht erstellt werden Allgemeine Java-Themen 12
B Java mit command line und jars benutzen? Allgemeine Java-Themen 18
M Java Überprüfen ob .exe-Datei bereits ausgeführt wird Allgemeine Java-Themen 2
B HTTP Allgemeine Fragen über Suchmaschine nutzen mit Java Allgemeine Java-Themen 20
Mick P. F. Wie kriege ich die Fehlermeldung "java: symbol lookup error: ..." weg? Allgemeine Java-Themen 11

Ähnliche Java Themen

Neue Themen


Oben