# Wie kann ich ein Java-Programm zum "automatischen Öffner" einer Dateisorte machen?



## Java-Insel (20. Aug 2012)

Man kennt es von Programmen wie der Vorschau, QuickTimePlayer oder anderen Programmen: Sie öffnen sich durch klicken auf eine Datei (z.B. grafik.png) und zeigen diese dann im Dateifenster an. Kann ich - und wenn ja, wie - so etwas auch durch einfache Java-Programmierung erzeugen oder braucht es da mehr? Mein Ziel wäre, dass ich ein Programm schreibe, das z.B. *.myjava-Dateien erzeugt. Im Finder/Windows Explorer soll man dann auf eine solche Datei klicken können und mein Programm öffnet sich - _und zeigt die Datei natürlich auch an!_ Wie lässt sich das bewerkställigen?


----------



## Akeshihiro (20. Aug 2012)

Rechtsklick auf die Datei -> Öffnen mit -> Standardprogramm festlegen.
Alternativ kannst du das auch gern in der Windows-Registry eintragen, passiert aber durch Klickibunti auch und geht viel schneller.


----------



## Michael... (20. Aug 2012)

Stichwort: Dateiverknüpfung. Grundsätzlich ist in der Registry hinterlegt wie bzw. mit welchem Tool eine Datei geöffnet werden soll. Windows bietet - abhängig von der Version - im Explorer die Möglichkeit an die Verknüpfung für eine Dateiendung festzulegen.


----------



## Kjubert (20. Aug 2012)

Da es hier um Java geht und die Systemunabhängigkeit irgendwie ne Schlüsselrolle spielt - wärs da nicht nett, wenn es ne Standard-Klasse gäbe, die das könnte?
Oder macht das bei MacOS und UNIX keinen Sinn? Ist da doch bestimmt nicht groß anders gelöst, oder?


----------



## Ark (20. Aug 2012)

Unter *nix startet man für gewöhnlich Programme, und nicht die Dateien, die mit diesen Programmen geöffnet werden sollen. Anders wäre es auch ein ziemliches Sicherheitsproblem: Der MP3-Start-umgeht-Windows-Media-Player-Sperre-Effekt ist wohl eher in der Windowswelt verbreitet. 

Mal von diesem grundsätzlichen Unterschied abgesehen, gibt's bei Linuxsystemen wohl auch einfach viel zu viel Auswahl. Da müsste ja jeder Fenstermanager, jede Desktopumgebung und - wenn man den Windows-Murks nachbauen wollte - sogar jede Shell berücksichtigt werden. Ich glaube nicht, dass Linuxnutzer das wollen.

Ark


----------



## Kjubert (20. Aug 2012)

[OT]





Ark hat gesagt.:


> Unter *nix startet man für gewöhnlich Programme, und nicht die Dateien, die mit diesen Programmen geöffnet werden sollen. Anders wäre es auch ein ziemliches Sicherheitsproblem: Der MP3-Start-umgeht-Windows-Media-Player-Sperre-Effekt ist wohl eher in der Windowswelt verbreitet.
> 
> Mal von diesem grundsätzlichen Unterschied abgesehen, gibt's bei Linuxsystemen wohl auch einfach viel zu viel Auswahl. Da müsste ja jeder Fenstermanager, jede Desktopumgebung und - wenn man den Windows-Murks nachbauen wollte - sogar jede Shell berücksichtigt werden. Ich glaube nicht, dass Linuxnutzer das wollen.
> 
> Ark



OK, das leuchtet mir ein.
Aber Windows-Media-Player-Benutzer habens ja auch garnicht anders verdient.[/OT]


----------



## Guest2 (20. Aug 2012)

Moin,

es gibt innerhalb der JNLP ein association tag, mit dem die Java Anwendung für bestimmte Dateitypen registriert werden kann. (JNLP File Syntax)

Das geht auch aus dem laufenden Programm heraus über IntegrationService.requestAssociation (JNLP API Examples)

(Ausprobiert hab ich das aber auch noch nicht.) 

Viele Grüße,
Fancy


----------



## Java-Insel (20. Aug 2012)

Hmm. Das ist ja alles schön und auch gut und ich werde das ausprobieren, aber wie kann mein Programm den dann mit der Datei umgehen? Wenn ich alles richtig übersetzt habe, kann man mit der JNLP das Programm für Dateitypen registrieren, aber wie das Programm mit der Datei umgehen soll, davon habe ich (bis jetzt) noch nichts gesehen.


----------



## Gast2 (20. Aug 2012)

Du bekommst den Pfad zur Datei in den Parametern übergeben.


----------



## Java-Insel (20. Aug 2012)

Puh... ich bin grad irgendwie überfordert mit meinem Englisch. Wenn ich es richtig verstehe, ist die JNLP-Datei eine *.xml-Datei, mit der man über Java-Befehle kommunizieren kann. Kann mir da jemand bitte ein Beispiel zeigen? Ich währe sehr, sehr, sehr Dankbar.


----------



## J7Dev (20. Aug 2012)

@TO
Ganz einfach :

FileType -> Open -> "javaw.exe -jar DeinProgramm.jar %1"

Damit wird der absolute Pfad zu der von dir angewählten Datei (also die auf die du Doppelklick machst" als Parameter an dein Programm übergeben. Diese Wiederum muss allerdings erstmal mit Java gestartet werden. Als Beispiel ist ".jar" genau so verknüpft : "javaw.exe -jar %1".

Unter Win7 geht das so :

CMD.exe als ADMIN starten
über "assoc" den Dateitypen registrieren : 
	
	
	
	





```
assoc .myfiletype=MyFileType
```
über "ftype" den Dateitypen mit einem "open-command" registrieren : 
	
	
	
	





```
ftyp MyFileType="C:\absoluter\pfad\zum\Java\home\bin\javaw.exe" -jar "C:\absoluter\pfad\zum\jar\Programm.jar" "%1"
```

ANFÜHRUNGSZEICHEN SIND WICHTIG ! MITSCHREIBEN !

Eventuell "explorer.exe" neu starten (oder ganzes System) und das ganze sollte funktionieren.

Unter Vista gehts genau so, XP und alles was älter ist : im Explorer -> Erweitert und dann "Dateitypzuordnung" oder so ähnlich und da kann man das ganze dann über ne GUI machen.


----------



## Guest2 (21. Aug 2012)

Java-Insel hat gesagt.:


> Puh... ich bin grad irgendwie überfordert mit meinem Englisch. Wenn ich es richtig verstehe, ist die JNLP-Datei eine *.xml-Datei, mit der man über Java-Befehle kommunizieren kann. Kann mir da jemand bitte ein Beispiel zeigen? Ich währe sehr, sehr, sehr Dankbar.



Die JNLP-Datei gehört zu Java Webstart. Das ist eine Java-Technologie um Java Anwendungen sehr einfach zu verteilen, zu installieren und zu starten. In der JNLP-Datei werden dazu Informationen hinterlegt, z.B. woher die Anwendung Updates beziehen kann, ob eine Verknüpfung im Startmenü angelegt werden soll, mit welchen VM-Parametern gestartet werden soll, oder eben ob die Anwendung mit bestimmten Dateitypen verknüpft werden soll.

Webstartanwendungen laufen in der Sandbox. Die JNLP-API bietet Methoden, um auch aus dieser Sandbox heraus mit dem System interagieren zu können. Alternativ kann die Anwendung auch signiert werden und darf dann "alles" (genau wie jede lokal installierte Anwendung auch).

Ich habe mir die Verknüpfung zu bestimmten Dateitypen aus der JNLP-Datei heraus inzwischen mal angesehen. Das läuft problemlos.

Meine Test- JNLP-Datei und die zugehörige "Anwendung".

Beim ersten Start der Anwendung wird beim Nutzer nachgefragt, ob dieser den Dateityp entsprechend verknüpfen möchte, das sieht dann so aus:







Legt man anschließend eine dateiname.xyz Datei an, kann diese anschließend einfach per Doppelklick geöffnet werden. Spätestens nach einmal neu starten trägt die Datei auch das Icon der Anwendung (oder wann immer Windows merkt das es da ein neues Icon zu gibt).

Zum selbst lokal testen einfach auf diesen Link klicken (sollte mit Java Webstart geöffnet werden). (Ist für Java 7 kompiliert, notfalls bietet Webstart auch ein Update der JRE an. Grundsätzlich geht das aber auch alles mit Java 6.)

Unter Linux funktioniert das mit der original Oracle JRE genau so (nur unter Fedora/Gnome 3 getestet). Mit IcedTea jedoch leider nicht.

Viele Grüße,
Fancy


----------



## jnetdev (22. Aug 2012)

wenn das ganze MULTI-Platform werden soll : *VERGISS ES*

wie schon jemand sagte : unter windows ist das noch easy ... aber spätestens an den unterschiedlichen UNIX versionen scheiterst du und müsstest einen "installer" schreiben der größer is als das programm ...


----------



## Guest2 (22. Aug 2012)

Bei welchem Betriebssystem siehst Du denn konkret Probleme? In der JNLP/Webstart-Spezifikation sind mir dazu keine Beschränkungen aufgefallen. Wenn es also irgendwo nicht geht, müsste man ggf. drüber nachdenken einen Bug report zu stellen.

Das es mit IcedTea nicht geht ist zwar schade, aber ich gehe davon aus, dass die Desktop Integration von IcedTea einfach noch nicht feature complete ist. Die Verknüpfung ins Startmenü klappt ja z.B. auch mit IcedTea. Und mit der Oracle JRE sowieso (OS übergreifend). 

Viele Grüße,
Fancy


----------

