Открыть окно браузера из программы Java
Вопрос
Вопрос
У меня есть приложение, написанное на Java.Он предназначен для автономной работы на Linux-системе.Я пытаюсь создать новый Fire Fox окно.Однако, Fire Fox никогда не открывается.Он всегда имеет код завершения оболочки 1.Я могу запустить этот же код с помощью gnome-терминал и открывается нормально.
Фон
Итак, вот процесс его инициализации:
- Start X "Xorg:1 -br -terminate -dpms -quiet vt7"
- Запустите диспетчер окон «metacity --display=:1 --replace».
- Настройте ресурсы «xrdb -merge /etc/X11/Xresources»
- Станьте демоном и отключитесь от управляющего терминала.
После запуска программы пользователь может нажать кнопку, которая должна открыть окно Firefox.Вот мой код для этого.Помните, что X работает на дисплее: 1.
Код
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;
}
}
Решение
прочитав различные ответы и различные комментарии (от спрашивающего), вот что я бы сделал
1) попробуйте этот 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();
подробнее об этом классе:
http://java.sun.com/developer/JDCTechTips/2005/tt0727.html#2
http://www.javabeat.net/tips/8-using-the-new-process-builder-class.html
2) попробуйте сделать это (запуск Firefox) из C/C++/ruby/python и посмотрите, получится ли это.
3) если ничего не помогает, я бы запустил программу-оболочку, и эта программа-оболочка запустила бы Firefox!!
Другие советы
Если вы можете сузить его до Java 6, вы можете использовать API рабочего стола:
http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/desktop_api/
Должно выглядеть примерно так:
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();
}
}
}
Использовать БраузерLauncher.
Вызвать его очень легко, просто зайдите
new BrowserLauncher().openURLinBrowser("http://www.google.com");
Возможно, вам повезет больше, если вы прочитаете и отобразите стандартные потоки вывода/ошибок, чтобы вы могли уловить любое сообщение об ошибке, которое может напечатать Firefox.
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());
}