Question

Question

J'ai une application écrite en Java. Il est conçu pour fonctionner sur une machine Linux autonome. J'essaie de créer une nouvelle fenêtre firefox . Cependant, firefox ne s'ouvre jamais. Il a toujours un code de sortie de shell de 1. Je peux exécuter ce même code avec gnome-terminal et il s'ouvre correctement.

Arrière-plan

Alors, voici son processus d'initialisation:

  1. Démarrer X "Xorg: 1 -br -terminate -dpms -quiet vt7"
  2. Démarrer le gestionnaire de fenêtres " metacity --display =: 1 --remplacer "
  3. Configurer les ressources "xrdb -merge / etc / X11 / Xresources"
  4. Devenez démon et déconnectez-vous du terminal de contrôle

Une fois que le programme est en cours d'exécution, un bouton sur lequel l'utilisateur peut cliquer doit générer une fenêtre firefox. Voici mon code pour le faire. Rappelez-vous que X est en cours d’affichage: 1.

Code


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;
  }
}
Était-ce utile?

La solution

après avoir lu les différentes réponses et divers commentaires (de l'interrogateur), voici ce que je ferais

1) essayez cette approche 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();

en savoir plus sur cette classe:

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

2) Essayez de faire ceci (lancer firefox) à partir de C / C ++ / ruby ??/ python et voyez si cela réussit.

3) Si tout le reste échoue, je lancerais un programme shell et ce programme shell lancerait Firefox !!

Autres conseils

Si vous pouvez vous limiter à Java 6, vous pouvez utiliser l'API de bureau:

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

Devrait ressembler à quelque chose comme:

    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();
            }
        }
    }

Utilisez BrowserLauncher .

Il est très facile de l'invoquer, il suffit d'aller

new BrowserLauncher().openURLinBrowser("http://www.google.com");

Vous aurez peut-être plus de chance si vous lisez et affichez les flux de sortie / d'erreur standard afin de pouvoir détecter tout message d'erreur que firefox pourrait imprimer.

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());
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top