ich habe eine Java-Application die sich bei einem Doppelklick auf eine registrierte Dateiendung zB. *.test
in Windows öffnen soll und dabei Parameter übergeben werden sollen. Die gewünschte Endung bekomme ich registriert und
in Java kann der main-Methode auch Parameter “String[]” übergeben werden, soweit muss es dort sicher einen Weg geben.
Jedoch nach langer Suche habe ich noch nicht das Richtige gefunden.
Ich hänge gerade bei dem Aufbau der Datei selbst und wie ich dort die Parameter deklariere.
Wie kann ich die Datei aufbauen, das ich die String-Parameter übergeben kann? Hat jemand eine Idee?
Solche Parameter gehören üblicher Weise in eine Properties-Datei entweder in das Installationsverzeichnis (wenns rechnerspezifisch ist) oder in das user.home (Wenns Benutzerspezifisch ist). Beide dateien musst Du dann innerhalb des Java-Programms einlesen.
danke für deine Antwort.
Ich weiß nicht ob ich mich richtig ausgedrückt hatte. Die Datei hat immer unterschiedliche Parameter.
Ein Beispiel:
Ich möchte mit der Java-Application eine Datei mit der entsprechenden Erweiterung z.B. *.test erzeugen, diese dann an
eine andere Person/Rechner per EMail senden der die gleiche Application installiert hat. Wenn die Person auf die Datei im Anhang der Mail
klick, öffnet sich die Java-Application und bekommt die Parameter automatisch übergeben. Aufgrund der Parameter möchte ich dann unterschiedliche
Aktionen auslösen.
Ich hoffe das habe ich etwas besser erklärt.
Ich glaube es geht darum, dass bei einem Doppelklick auf eine Datei mit einer bestimmten Dateiendung automatisch das zugehörige Programm aufgerufen wird mit dem Dateipfad als Übergabeparameter in der main-Methode.
Wenn dem so ist, dann muss die Dateiendung in der Registry (entweder per Hand oder mithilfe eines Installers) eingetragen werden zusammen mit dem Installationsverzeichnis der JVM* und als Parameter für die JVM wiederum das Installationsvereichnis deiner Jar.
*Das Installationsverzeichnis der JVM wird beim installieren meist in der globalen Systemvariable “java” gespeichert, entsprechend kann auch einfach nur das in der Registry angegeben werden zusammen mit dem absoluten Pfad deiner Jar.
ja, genau das meine ich, bei einem Doppelklick auf die *.test Datei soll sich das Programm öffnen und die Parameter werden dann der main() - Methode übergeben.
Ich versuche mal ein anschaulicheres Beispiel: Meine Application heist zB. Testprogram und die zugehörige Erweiterung ist *.test. (Wie bei Word und *.docx).
Klicke ich auf die Datei 4711_Beispiel.test wird Testprogramm geöffnet → Das erkennt Windows über die Zuordnung von *.test zu Testprogram in der Registry.
Die Datei 4711_Beispiel.test soll nun aber der main()-Methode drei String-Parameter übergeben mit denen ich dann weitere Aktionen durchführen möchte.
Den Eintrag in die Registry bekomme ich hin, das kann ich über meinen Installer erledigen. Meine Java Application ist auch schon ein *.exe Datei. Das heißt mit
dem Registry-Eintrag für das Testprogramm kann ich bereits meine Application starten. Mir fehlt der Aufbau, wie ich die Datei 4711_Beispiel.test gestalte, das meine main()-Methode die Parameter erkennt. Die Parameter sind ca. 3 Strings.
Es sollen also direkt die Aufrufparameter gesetzt werden. Z.B Begrüßung=„Hallo“, Geschlecht=„Frau“, Name=„Schulze“;
Dann startet das Programm mit dem Fenster „Hallo Frau Schulze“. Nur als Beispiel
Diese Parameter sind dann immer unterschiedlich.
Ist schwierig zu erklären, ich habe im Netz nach langem Suchen auch nicht das richtige gefunden. Hoffe ich konnte es jetzt besser erklären.
Was spricht statt .test eine .bat Datei zu nehmen mit folgendem Inhalt: java Testprogramm Hallo Frau Schulze?
Die Batch Datei würde dann genau das machen. Die drei Parameter bekommst du in der main Methode als Argumente übergeben. Und per Doppelklick kann man eine Batch Datei auch öffnen.
Die Parameter sollen also irgendwie mit der Mail geliefert werden?
Warum sie dann nicht (dynamisch) beim senden der Mail in die *.test Datei mit rein schreiben?
erstmal danke für Eure Anregungen und Diskussion, das hat mich noch mal auf eine neue Idee gebracht, bzw. meine Recherche auf neue Suchwörter.
Die Lösung habe ich nun gefunden und Sie ist eigentlich simple, es ist egal was ich in die *.test Datei schreibe, denn wenn eine Datei-Erweiterung einer Java-Application zuordne, wird in args[0], der komplette Inhalt der Datei übergeben. Diesen kann man dann mit einem
InputStream einfach auslesen und weiter verarbeiten. Den Hinweis habe ich Create a file association with a Java program - Real’s Java How-to gefunden. Eigentlich sieht die klasse nun wie folgt aus.
public static void main(String[] args) throws InterruptedException {
readParameter(args);
startProgram();
}
private static boolean readParameter(String[] args, Daten daten) {
try {
String line = null;
int i = 0;
FileInputStream fin = new FileInputStream(args[0]);
BufferedReader myInput = new BufferedReader(new InputStreamReader(fin));
StringBuilder st = new StringBuilder();
while ((line = myInput.readLine()) != null) {
//mach was mit der line
i++;
if (i == 50) {
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
}```
Gruß whitetea