2008-10-29 29 views
5

Preguntaventana del navegador abierta del programa Java

que tiene una aplicación escrita en Java. Está diseñado para ejecutarse en una caja Linux autónoma. Estoy tratando de engendrar una nueva ventana de firefox. Sin embargo, firefox nunca se abre. Siempre tiene un código de salida de shell de 1. Puedo ejecutar este mismo código con gnome-terminal y se abre bien.

Antecedentes

lo tanto, aquí es su proceso de inicialización:

  1. Inicio X "Xorg: 1 -br termine los -dpms -quiet vt7"
  2. de inicio del administrador de ventanas "metaciudad - -display =: 1 --replace "
  3. Configure los recursos" xrdb -merge/etc/X11/Xresources "
  4. Conviértase en un daemon y desconéctese de controlar t erminal

Una vez que el programa se ejecuta, hay un botón en el que el usuario puede hacer clic para generar una ventana de Firefox. Aquí está mi código para hacer eso. Recuerde que X se está ejecutando en la pantalla: 1.

Código


public boolean openBrowser() 
{ 
    try { 
    Process oProc = Runtime.getRuntime().exec("/usr/bin/firefox --display=:1"); 
    int bExit = oProc.waitFor(); // This is always 1 for some reason 

    return true; 

    } catch (Exception e) { 
    oLogger.log(Level.WARNING, "Open Browser", e); 
    return false; 
    } 
} 
+0

Creo que falta algo. – Patrick

+0

Tienes razón. De alguna manera lo publiqué antes de que terminara de escribir. Debería estar allí en su totalidad ahora. –

Respuesta

2

después de haber leído las diferentes respuestas y varios comentarios (de interrogador), esto es lo que yo haría

1) tratar este enfoque java http://java.sun.com/j2se/1.5.0/docs/api/java/lang/ProcessBuilder.html

ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2"); 
Map<String, String> env = pb.environment(); 
env.put("VAR1", "myValue"); 
env.remove("OTHERVAR"); 
env.put("VAR2", env.get("VAR1") + "suffix"); 
pb.directory("myDir"); 
Process p = pb.start(); 

ver más sobre esta clase:

http://java.sun.com/developer/JDCTechTips/2005/tt0727.html#2
http://www.javabeat.net/tips/8-using-the-new-process-builder-class.html

2) tratar de hacer esto (el lanzamiento de Firefox) en C/C++/Ruby/Python y ver si está teniendo éxito.

3) si todo lo demás falla, lanzaría un programa de shell y ese programa shell lanzaría Firefox !!

+0

Esto funcionó. Resultó que, dado que no estoy ejecutando un entorno de escritorio, tuve que configurar la variable de entorno HOME para que Firefox se ejecutara correctamente. –

9

Si puede limitar la búsqueda a Java 6, puede utilizar la API de escritorio:

http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/desktop_api/

debería ser algo como:

if (Desktop.isDesktopSupported()) { 
     Desktop desktop = Desktop.getDesktop(); 
     if (desktop.isSupported(Desktop.Action.BROWSE)) { 
      try { 
       desktop.browse(new URI("http://localhost")); 
      } 
      catch(IOException ioe) { 
       ioe.printStackTrace(); 
      } 
      catch(URISyntaxException use) { 
       use.printStackTrace(); 
      } 
     } 
    } 
+2

Intenté usar esto, pero obtengo un rastreo.

 java.io.IOException: Failed to show URI: at sun.awt.X11.XDesktopPeer.launch(XDesktopPeer.java:75) at sun.awt.X11.XDesktopPeer.browse(XDesktopPeer.java:64) at java.awt.Desktop.browse(Desktop.java:368) 

0

Es posible que tenga mejor suerte si lee y muestra los flujos estándar de salida/error, de modo que puede capturar cualquier mensaje de error que firefox pueda imprimir.

+0

Parece que no puedo obtener ningún resultado de Firefox. –

4

Use BrowserLauncher.

lo alega, es muy fácil, sólo tiene que ir

new BrowserLauncher().openURLinBrowser("http://www.google.com"); 
0
try { 
    String url = "http://www.google.com"; 
    java.awt.Desktop.getDesktop().browse(java.net.URI.create(url)); 
} catch (java.io.IOException e) { 
    System.out.println(e.getMessage()); 
} 
Cuestiones relacionadas