Apri la finestra del browser dal programma Java
Domanda
Domanda
Ho un'applicazione scritta in Java. È progettato per funzionare su un box Linux autonomo. Sto cercando di generare una nuova finestra firefox . Tuttavia, firefox non si apre mai. Ha sempre un codice di uscita della shell di 1. Posso eseguire questo stesso codice con gnome-terminal e si apre bene.
Sfondo
Quindi, ecco il suo processo di inizializzazione:
- Avvia X " Xorg: 1 -br -terminate -dpms -quiet vt7 "
- Avvia Window Manager " metacity --display =: 1 --replace "
- Configura risorse " xrdb -merge / etc / X11 / Xresources "
- Diventa un demone e disconnettiti dal terminale di controllo
Una volta avviato il programma, c'è un pulsante su cui l'utente può fare clic per generare una finestra di Firefox. Ecco il mio codice per farlo. Ricorda che X è in esecuzione sul display: 1.
Codice
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;
}
}
Soluzione
dopo aver letto le varie risposte e i vari commenti (dall'interrogante), ecco cosa farei
1) prova questo approccio 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();
vedi di più su questa classe:
http://java.sun.com/developer/JDCTechTips /2005/tt0727.html#2
http://www.javabeat.net/ suggerimenti / 8-con-la-nuova-processo-costruttore-class.html
2) prova a farlo (lanciando firefox) da C / C ++ / ruby ??/ python e vedi se ci riesce.
3) se tutto il resto fallisse, lancerei un programma shell e quel programma shell lancerebbe firefox !!
Altri suggerimenti
Se puoi restringerlo a Java 6, puoi usare l'API desktop:
http://java.sun.com/developer/technicalArticles / J2SE / Desktop / javase6 / desktop_api /
Dovrebbe assomigliare a:
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();
}
}
}
Usa BrowserLauncher .
Invocarlo è molto semplice, basta andare
new BrowserLauncher().openURLinBrowser("http://www.google.com");
Potresti avere più fortuna se leggi e visualizzi i flussi di output / errore standard, in modo da poter catturare qualsiasi messaggio di errore che Firefox può stampare.
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());
}