2010-11-22 21 views
20

Necesito que mi programa Java tenga dos modos de visualización: una interfaz GUI y una interfaz de línea de comando. Si lo ejecuto en Windows, OS X u otro entorno gráfico, debería obtener la interfaz GUI, pero si lo ejecuto a través de SSH debería obtener la interfaz de línea de comando.¿Cómo detectar si se admite una interfaz gráfica?

¿Cómo puedo detectar si se puede mostrar una GUI o si debería usar una interfaz de línea de comando?

Respuesta

26

que en realidad tienen dos preguntas:

1) Comprobar si se ejecuta en un entorno sin cabeza (sin gráficos). Compruebe este método:

if (GraphicsEnvironment.isHeadless()) { 
    // non gui mode 
} else { 
    // gui mode 
} 

2) Compruebe qué sistema operativo se está ejecutando en:

System.getProperty("os.name") 

Sin embargo, la segunda (2) pregunta devolverá el mismo nombre a pesar de que trabaja en un entorno sin cabeza.

+1

Sólo una nota. "isHeadless" L en minúsculas; me desordenó jeje –

+0

@dacwe Parecía que la parte sobre el sistema operativo en la pregunta era solo una explicación de qué investigación se había hecho, en lugar de una segunda pregunta. Como tal, edité la pregunta original, ya que era ruido. Creo que deberías editar tu respuesta para reflejar la pregunta aclarada. – Vulcan

+0

Esta no es una respuesta del todo correcta, por favor consulte esta [pregunta aquí] (http://stackoverflow.com/a/16611566/1584507) ** isHeadless ** devolvería cierto inesperado en ciertos casos y eso es no es lo que quiere, cuando está buscando si realmente hay una pantalla o pantalla disponible. – Indigo

2

Recomiendo agregar una opción de línea de comando que determina si usar la línea de comandos o la interfaz gráfica de usuario, porque el usuario puede querer usar la interfaz de línea de comandos incluso en el entorno donde la GUI está disponible.

También puede verificar si el dispositivo de la consola está disponible o no con System.console().

2

¿Por qué no crear dos clases, una para la línea de comandos y otra para la GUI? Más abajo puede que desee crear dos productos y luego puede entregar el sin cabeza sin dependencias a libs gráficas.

+1

Esa fue mi idea, sin embargo, no sabía cómo detectar cuál se estaba ejecutando. Thnx –

3

Tanto dacwe como vitaut tienen razón. Solo quería agregar una recomendación. Debe usar el patrón MVC (modelo-vista-controlador) cuando diseña su aplicación. Por lo tanto, si se está ejecutando en modo UI, usa UIView; de lo contrario, ConsoleView.

Dacwe te recomendó cómo puedes decidir automáticamente qué modo usar. Debido a que Java es un lenguaje multiplataforma, creo que el nombre del sistema operativo es irrelevante para usted. El hecho de que el sistema tenga un entorno gráfico es más relevante, así que use GraphicsEnvironment.isHeadless().

System.console() le ayudará a crear la aplicación controlada por shell.

-2

que estaba buscando misma solución del te y se acercó con sólo tiene que utilizar un argumento así que cuando corro mi programa de comandline los argumentos difiere en longitud

if(args.length > 0) { 
    System.out.println("command line mode"); 
} 
+3

También puede especificar argumentos para aplicaciones en ventanas, por cierto. Y, también, puede invocar su aplicación sin argumentos de la consola, también. –

Cuestiones relacionadas