usuario texto studio programacion móviles interfaz gui desarrollo curso aplicaciones java file editor system

java - texto - ¿Cómo abrir el editor preferido del sistema del usuario para el archivo dado?



java swing (4)

Esto no es multiplataforma, pero en Mac OS X puedes hacer

Runtime.getRuntime().exec("open filename");

El ejecutable open(1) usa LaunchServices para elegir el programa correcto para ejecutar y luego lo usa para abrir el archivo llamado filename .

Estoy intentando descubrir cómo abrir el editor preferido del sistema para un archivo determinado.

Digamos, tenemos un administrador de archivos, escrito en Java. El usuario va a la carpeta y ve la lista de archivos. Y, por ejemplo, hay un archivo Icon.jpg . El usuario hace doble clic en el nombre del archivo y el archivo se abre en el editor preferido del sistema (es decir, Gimp). El problema principal es: ¿cómo hacer eso?

Podemos hacer Runtime.getRuntime().exec("something file") , pero de esta manera usted debe saber qué programa es el preferido en el entorno del usuario. ¿Pero cómo?

También podemos hacer Desktop.getDesktop().edit(File file) , pero de esta manera no podemos rastrear el proceso y no podemos saber, entonces este proceso hijo está cerrado. Otro problema: la función no funciona en Linux (al menos en Ubuntu 8.10). También está Desktop.getDesktop().open(File file) , pero obliga a abrir el visor de archivos, en lugar del visor del sistema para ese tipo de archivo.

Estoy buscando una solución toda la semana, pero no tengo ninguna adecuada y genérica. ¿Conoces los otros enfoques a esta pregunta? Para mi proyecto, sería suficiente si funcionara en Windows + Linux + Mac.

Gracias por tus respuestas y consejos.

Editar en 2009-02-08 23:04

Otra sugerencia: ¿puedo forzar la ventana de "selección de aplicaciones" en Windows y en Linux, como en Mac con "abrir archivo"? Por ejemplo, luego de intentar abrir el archivo, ¿se le pide que elija la aplicación de la lista de sistemas preferidos? (algo así como "Abrir con ..." en el explorador de Windows). ¿Tú sabes?


Mira el objeto java.awt.Desktop . En tu caso, quieres invocar edit()

Si quiere asegurarse de que una plataforma determinada admita esta llamada, puede hacer algo como lo siguiente (no he probado este código):

public boolean editFile(final File file) { if (!Desktop.isDesktopSupported()) { return false; } Desktop desktop = Desktop.getDesktop(); if (!desktop.isSupported(Desktop.Action.EDIT)) { return false; } try { desktop.edit(file); } catch (IOException e) { // Log an error return false; } return true; }


Parece que si no puede usar java.awt.Desktop , debe distinguir entre los sistemas operativos: Windows:

RUNDLL32.EXE SHELL32.DLL,OpenAs_RunDLL <file.ext>

Linux:

edit <file.ext>

Mac:

open <file.ext>

HTH. Obviamente, eso no es muy portátil ...


Esto funcionará en Windows

Runtime.getRuntime().exec( "CMD /C START filename.ext " );