فتح نافذة المتصفح من برنامج جافا
سؤال
السؤال
لدي تطبيق مكتوب بلغة جافا.وهي مصممة لتعمل على لينكس صندوق مستقل.أنا أحاول أن تفرخ جديد فايرفوكس نافذة.ومع ذلك ، فايرفوكس لم يفتح.لديها دائما شل كود الخروج من 1.لا يمكن تشغيل هذا الرمز نفسه مع gnome-terminal و يفتح بخير.
الخلفية
حتى هنا هو عملية التهيئة:
- تبدأ X "Xorg :1 -br-إنهاء-dpms -هادئة vt7"
- بدء تشغيل نافذة "مدير metacity --عرض=:1 --استبدال"
- تكوين الموارد "xrdb -دمج /etc/X11/Xresources"
- تصبح شيطان وقطع من السيطرة على محطة
عندما يصل البرنامج تشغيل ، هناك زر يمكن للمستخدم النقر ينبغي أن تفرخ فايرفوكس نافذة.هنا هو بلدي البرمجية للقيام بذلك.تذكر 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) جرب هذه جافا النهج 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) حاول القيام بذلك(شن فايرفوكس) من C/C++/روبي/بيثون ومعرفة ما إذا كان هذا هو النجاح.
3) إذا فشل كل شيء آخر ، وأود أن إطلاق قذيفة البرنامج أن برنامج قذيفة إطلاق فايرفوكس!!
نصائح أخرى
إذا كنت يمكن أن ضيق عليه جافا 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();
}
}
}
استخدام BrowserLauncher.
الاحتجاج فمن السهل جدا فقط اذهب
new BrowserLauncher().openURLinBrowser("http://www.google.com");
قد يكون لديك أفضل حظا إذا كنت تقرأ وعرض مستوى الإخراج/خطأ تيارات ، حتى تتمكن من التقاط أي رسالة خطأ فايرفوكس قد تتم طباعة.
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());
}