Ouvrir la fenêtre du navigateur à partir du programme Java
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:
- Démarrer X "Xorg: 1 -br -terminate -dpms -quiet vt7"
- Démarrer le gestionnaire de fenêtres " metacity --display =: 1 --remplacer "
- Configurer les ressources "xrdb -merge / etc / X11 / Xresources"
- 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;
}
}
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());
}