2009-02-18 12 views
6

Ich zeige eine Liste von Dateien an; d. h. xls, doc, pdf, odt usw., in meiner Java-Anwendung (Eclipse RCP). Wenn der Benutzer auf die Datei klickt, möchte ich die entsprechende (je nach Betriebssystem) systemeigene Anwendung starten, genau wie im Windows Explorer oder im Finder.Wie startet man die Standard (native) Anwendung für eine bestimmte Datei aus Java?

Und während ich hier bin: Es wäre schön, auch die gleichen Symbole anzuzeigen, die Finder oder Explorer für die verschiedenen Dateitypen verwenden.

Gibt es dafür eine Bibliothek oder ein Eclipse-Plugin?

+1

Dies scheint ein Duplikat dieser Frage zu sein: http://stackoverflow.com/questions/325299/cross-platform-way-to-open-a- file-using-java-1-5 –

+1

Nicht wirklich, beachten Sie die Einschränkung Java 1.5 dort: "Ich weiß, dass Java 1.6 die Desktop-API eingeführt hat, aber ich brauche eine Lösung für Java 1.5." – Jonik

Antwort

2

Klingt wie du bist nach der Java Activation Framework ("JAF"). Mit dieser API können Sie bestimmen, welche Dateien und welche Aktionen Sie ausführen können. Oder alternativ die Java Desktop Integration Component ("JDIC"). JDIC ermöglicht es Ihnen, Dateizuordnungen zu erstellen und ohne Zweifel zu fragen.

Beide Projekte scheinen in einem halb verlassenen Zustand zu sein, wie man schreit (Seufzer). Aber das ist heutzutage für Sun selbstverständlich. Nur eine andere Sache, die ich kenne, ist eine Windows-spezifische Third-Party-Bibliothek, die auf JNI namens Winpack basiert. Es macht auch eine Menge anderer Dinge.

Sie können get the associated icon mit der FileSystemView Klasse (Java 1.4 +).

+0

Hmm, Desktop.open() scheint der einfachste Weg. Wenn man Java 6 benutzen kann, gibt es dann einige Vorteile, wenn man eine dieser Bibliotheken benutzt? – Jonik

6

Ich habe jetzt eine API in Eclipse SWT gefunden, die den Trick zu tun scheint: org.eclipse.swt.program.Program "bietet Zugriff auf Einrichtungen für die Erkennung von Betriebssystem spezifischen Aspekte der externen Programmstart."

Es hat Methoden, um das Programm für eine bestimmte Dateierweiterung zu finden, das Symbol des Programms zu erhalten und sogar das Programm zu starten.

11

Was Sie wollen, ist java.awt.Desktop:

Desktop.getDesktop().open(file); 
+1

Desktop funktioniert nicht gut unter Windows: 'java.io.IOException: Fehler beim Öffnen der Datei:/C: /Documents%20and%20Settings/Administrator/Desktop/test.pdf. Fehlermeldung: Anwendung nicht gefunden \t bei sun.awt.windows.WDesktopPeer.ShellExecute (unbekannte Quelle) ~ [na: 1.6.0_26] ' – Eero

+2

Eero, funktioniert die Funktion wie vorgesehen: http://download.oracle.com /javase/6/docs/api/java/awt/Desktop.html#open%28java.io.File%29 open wird eine IOException auslösen, "wenn der angegebenen Datei keine Anwendung zugeordnet ist oder die zugehörige Anwendung nicht gestartet werden kann". Sie könnten über die Aufforderung nach einer Anwendung nachdenken, die verwendet werden soll, wenn eine IOException ausgelöst wird. –