2009-02-18 7 views
6

Estoy mostrando una lista de archivos; es decir, xls, doc, pdf, odt etc., en mi aplicación Java (Eclipse RCP). Cuando el usuario hace clic en el archivo, quiero iniciar la aplicación nativa apropiada (de acuerdo con lo que piensa el SO), tal como sucede en el Explorador de Windows o en el Buscador.¿Cómo iniciar la aplicación predeterminada (nativa) para un archivo dado de Java?

Y mientras estoy aquí: Sería bueno también mostrar los mismos íconos que Finder o Explorer usan para los diferentes tipos de archivos.

¿Hay una biblioteca o un plugin de Eclipse para esto?

+1

Esto parece ser un duplicado de esta pregunta: http://stackoverflow.com/questions/325299/cross-platform-way-to-open-a- file-using-java-1-5 –

+1

No realmente, observe la restricción de Java 1.5 allí: "Sé que Java 1.6 introdujo la Desktop API, pero necesito una solución para Java 1.5." – Jonik

Respuesta

2

Suena como si buscara el Java Activation Framework ("JAF"). Esta API le permite determinar qué archivos son y qué acciones puede hacer con ellos. O alternativamente, el Java Desktop Integration Component ("JDIC"). JDIC le permite crear y sin dudas consultar asociaciones de archivos.

Ambos proyectos parecen estar en un estado semi-abandonado howeer (suspiro). Pero eso es parte del curso para Sun en estos días. Otra cosa que sé es una biblioteca de terceros específica de Windows basada en JNI llamada Winpack. También hace un montón de otras cosas.

Puede get the associated icon usando la clase FileSystemView (Java 1.4+).

+0

Hmm, Desktop.open() parece la forma más sencilla. Si uno puede usar Java 6, ¿hay algunas ventajas en usar una de estas libs? – Jonik

6

He encontrado una API en SWT de Eclipse ahora que parece hacer el truco: org.eclipse.swt.program.Program "proporciona acceso a las instalaciones para descubrir los aspectos específicos del sistema operativo del lanzamiento de programas externos."

Tiene métodos para encontrar el programa para una extensión de archivo determinada, obtener el icono del programa e incluso iniciar el programa.

11

Lo que queremos es java.awt.Desktop:

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

El escritorio no funciona bien en Windows: 'java.io.IOException: no se pudo abrir el archivo:/C: /Documents%20and%20Settings/Administrator/Desktop/test.pdf. Mensaje de error: No se encontró la aplicación \t en sun.awt.windows.WDesktopPeer.ShellExecute (Fuente desconocida) ~ [na: 1.6.0_26] ' – Eero

+2

Eero, la función funciona como se diseñó: http://download.oracle.com /javase/6/docs/api/java/awt/Desktop.html#open%28java.io.File%29 open arrojará una IOException "si el archivo especificado no tiene una aplicación asociada o si la aplicación asociada no se inicia". Puede pensar en solicitar una aplicación para usar si se lanza una IOException. –

Cuestiones relacionadas