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:

  1. Avvia X " Xorg: 1 -br -terminate -dpms -quiet vt7 "
  2. Avvia Window Manager " metacity --display =: 1 --replace "
  3. Configura risorse " xrdb -merge / etc / X11 / Xresources "
  4. 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;
  }
}
È stato utile?

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());
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top