जावा का उपयोग करके डिफ़ॉल्ट वेबब्रोसर कैसे खोलें


107

क्या कोई मुझे सही दिशा में इंगित कर सकता है कि डिफ़ॉल्ट वेब ब्राउज़र कैसे खोलें और पृष्ठ को "www.example.com" धन्यवाद पर सेट करें


2
डुप्लीकेट प्रश्न: stackoverflow.com/q/10967451/873282
koppor

जवाबों:


161

java.awt.Desktop वह वर्ग है जिसकी आप तलाश कर रहे हैं।

import java.awt.Desktop;
import java.net.URI;

// ...

if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) {
    Desktop.getDesktop().browse(new URI("http://www.example.com"));
}

3
क्या यह केवल एक क्रॉस-प्लेटफॉर्म समाधान या विंडोज है? इस सूत्र में अन्य उत्तर लिनक्स के लिए रनटाइम क्लास का उपयोग करने का सुझाव देते हैं
isapir

@ लेगल, इसने मेरे लिए विंडोज 7 और लिनक्स (उबंटू 10.10) दोनों पर काम किया। यह हमेशा डिफॉल्ट सिस्टम ब्राउज़र (IE पर Win7 और फ़ायरफ़ॉक्स उबंटू पर, मेरे मामले में) को खोलता है
जोआकिम ओलिवेरा

1
यह मेरे लिए काम नहीं करता है। IsDesktopSupported विधि हमेशा मेरी विंडोज़ मशीन पर झूठी लौटती है। क्या बात है?
krzysiek.ste

2
यदि उपयोगकर्ता ने "html" जैसी फ़ाइल के लिए एक कस्टम "ओपन विथ एक्शन" फाइल को सौंपा है, तो यह ब्राउज़र को नहीं खोलेगा, लेकिन उपयोगकर्ता ने जिस प्रोग्राम के साथ इसे जोड़ा है ... यह बिल्कुल भी समाधान नहीं है!
तेरस

4
@ krzysiek.ste Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)इसके बजाय चेक का उपयोग करें।
थिबस्टार

35

यहाँ मेरा कोड है। यह डिफॉल्ट ब्राउज़र (क्रॉस प्लेटफॉर्म सॉल्यूशन) में दिया गया url खोलेगा।

import java.awt.Desktop;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

public class Browser {
    public static void main(String[] args) {
        String url = "http://www.google.com";

        if(Desktop.isDesktopSupported()){
            Desktop desktop = Desktop.getDesktop();
            try {
                desktop.browse(new URI(url));
            } catch (IOException | URISyntaxException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }else{
            Runtime runtime = Runtime.getRuntime();
            try {
                runtime.exec("xdg-open " + url);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

2
"xdg-open 'को आंतरिक या बाहरी कमांड, ऑपरेशनल प्रोग्राम या बैच फ़ाइल के रूप में मान्यता नहीं दी जाती है।"
xehpuk

10
यह एक यूनिक्स कमांड है। आप इसे खिड़कियों में क्या कर रहे हैं
ओलू स्मिथ

7
'Desktop.isDesktopSupported ()' के साथ-साथ 'Desktop.getDesktop () isSupported (Action.BROWSE)' भी जांचें।
कंचू

35

मेरे लिए समाधान के साथ Desktop.isDesktopSupported()काम नहीं करता है ( विंडोज़ 7 और ubuntu )। कृपया इसे जावा कोड से ब्राउज़र खोलने का प्रयास करें:

खिड़कियाँ:

Runtime rt = Runtime.getRuntime();
String url = "http://stackoverflow.com";
rt.exec("rundll32 url.dll,FileProtocolHandler " + url);

मैक

Runtime rt = Runtime.getRuntime();
String url = "http://stackoverflow.com";
rt.exec("open " + url);

लिनक्स:

Runtime rt = Runtime.getRuntime();
String url = "http://stackoverflow.com";
String[] browsers = { "epiphany", "firefox", "mozilla", "konqueror",
                                 "netscape", "opera", "links", "lynx" };

StringBuffer cmd = new StringBuffer();
for (int i = 0; i < browsers.length; i++)
    if(i == 0)
        cmd.append(String.format(    "%s \"%s\"", browsers[i], url));
    else
        cmd.append(String.format(" || %s \"%s\"", browsers[i], url)); 
    // If the first didn't work, try the next browser and so on

rt.exec(new String[] { "sh", "-c", cmd.toString() });

यदि आप मल्टीप्लायर अनुप्रयोग करना चाहते हैं, तो आपको ऑपरेशन सिस्टम जाँच (उदाहरण के लिए) जोड़ने की आवश्यकता है:

String os = System.getProperty("os.name").toLowerCase();

खिड़कियाँ:

os.indexOf("win") >= 0

मैक:

os.indexOf("mac") >= 0

लिनक्स:

os.indexOf("nix") >=0 || os.indexOf("nux") >=0

1
यहां StringBuffer का उपयोग क्यों किया जाता है?
Stephan

2
लिनक्स समाधान में सभी ब्राउज़रों को सूचीबद्ध करना बहुत बुरा है। क्या होगा अगर कोई सूची से किसी अन्य ब्राउज़र का उपयोग करता है? (सूची में क्रोम या क्रोमियम नहीं है) या एपिफेनी और फ़ायरफ़ॉक्स दोनों हैं, लेकिन बाद का उपयोग करना पसंद करते हैं? xdg-openइस मामले में उपयोग करना बेहतर है। समाधान इसलिए macOS एक के रूप में सरल हो सकता है।
m4tx 18

विंडोज के लिए एक और विकल्प rt.exec ("start \" "+ url +" \ ") है;
इवान निकितिन

6

आप क्रॉस प्लेटफॉर्म समाधान बनाने के लिए रनटाइम का उपयोग भी कर सकते हैं:

import java.awt.Desktop;
import java.net.URI;

public class App {

    public static void main(String[] args) throws Exception {
        String url = "http://stackoverflow.com";

        if (Desktop.isDesktopSupported()) {
            // Windows
            Desktop.getDesktop().browse(new URI(url));
        } else {
            // Ubuntu
            Runtime runtime = Runtime.getRuntime();
            runtime.exec("/usr/bin/firefox -new-window " + url);
        }
    }
}

5

जैसा कि टिम कूपर द्वारा दिए गए जवाब में कहा गया है, java.awt.Desktopयह क्षमता जावा संस्करण 6 (1.6) के बाद से प्रदान की गई है, लेकिन निम्नलिखित चेतावनी के साथ:

डेस्कटॉप एपीआई उपलब्ध है या नहीं यह निर्धारित करने के लिए isDesktopSupported () विधि का उपयोग करें। Solaris ऑपरेटिंग सिस्टम और लिनक्स प्लेटफ़ॉर्म पर, यह API Gnome पुस्तकालयों पर निर्भर है। यदि वे लाइब्रेरी अनुपलब्ध हैं, तो यह विधि गलत वापस आ जाएगी।

ऐसे प्लेटफ़ॉर्म जो समर्थन या प्रदान नहीं करते हैं java.awt.Desktop, BrowserLauncher2 प्रोजेक्ट में देखें। यह एरिक अल्बर्ट द्वारा मूल रूप से लिखे और जारी किए गए BrowserLauncher वर्ग से प्राप्त और कुछ हद तक अपडेट किया गया है। मैंने मूल BrowserLauncher वर्ग का उपयोग बहु-प्लेटफ़ॉर्म जावा एप्लिकेशन में सफलतापूर्वक किया था जो 2000 के दशक की शुरुआत में एक वेब ब्राउज़र इंटरफ़ेस के साथ स्थानीय रूप से चलता था।

ध्यान दें कि BrowserLauncher2 को GNU लेसर जनरल पब्लिक लाइसेंस के तहत लाइसेंस प्राप्त है । यदि वह लाइसेंस अस्वीकार्य है, तो मूल BrowserLauncher की एक प्रति देखें, जिसमें एक बहुत ही उदार लाइसेंस है:

यह कोड एरिक अल्बर्ट (ejalbert@cs.stanford.edu) द्वारा 1999-2001 का कॉपीराइट है और प्रतिबंध के बिना किसी भी रूप में तब तक पुनर्वितरित या संशोधित किया जा सकता है, जब तक कि इस पैराग्राफ से टिप्पणी के अंत तक इस टिप्पणी के हिस्से को हटा नहीं दिया जाता। । लेखक अनुरोध करता है कि उसे किसी भी एप्लिकेशन, एप्लेट या अन्य बाइनरी के बारे में सूचित किया जाए जो इस कोड का उपयोग करता है, लेकिन यह किसी भी चीज़ से अधिक उत्सुकता से बाहर है और इसकी आवश्यकता नहीं है। इस सॉफ्टवेयर में कोई वारंटी शामिल नहीं है। लेखक डेटा या कार्यक्षमता के किसी भी नुकसान या इस सॉफ़्टवेयर का उपयोग करने के किसी भी प्रतिकूल या अप्रत्याशित प्रभावों के लिए पुन: प्रयोज्य नहीं है।

श्रेय: स्टीवन स्पेन्सर, जावावर्ल्ड पत्रिका (जावा टिप 66) रॉन बी येह, एरिक शापिरो, बेन एंगबर, पॉल टिटेलबौम, एंड्रिया कैंटोरो, लैरी ब्रॉवस्की, ट्रेवर बेडेक, फ्रैंक मिडरिक और रॉन रबाकुक को भी धन्यवाद

BrowserLauncher2 के अलावा अन्य परियोजनाओं ने भी मूल BrowserLauncher को ब्राउज़र में परिवर्तनों और डिफ़ॉल्ट सिस्टम सुरक्षा सेटिंग्स के लिए 2001 से अद्यतन किया हो सकता है।


BrowserLauncher2 का बना हुआ कांटा github.com/rajing/browserlauncher2
koppor

1
Mac पर BrowserLauncher2 का उपयोग करने की चाह रखने वालों के लिए, न तो मूल BrowserLauncher2 या @koppor द्वारा उल्लिखित कांटा Mac OS X Sierra के साथ काम करता है। दोनों एक "mrj.version" प्रणाली संपत्ति के अस्तित्व को मानते हैं जो स्पष्ट रूप से अब मौजूद नहीं है। जब लांचर का निर्माण किया जाता है तो कोड NullPointerException को फेंक देगा। अतिरिक्त जानकारी के लिए sourceforge.net/p/browserlaunch2/bugs/14 देखें ।
कॉरन

4

इसका बहुत ही सरल कोड के नीचे लिखें:

String s = "http://www.google.com";
Desktop desktop = Desktop.getDesktop();
desktop.browse(URI.create(s));

या यदि आप URL लोड नहीं करना चाहते हैं, तो बस अपने ब्राउज़र का नाम स्ट्रिंग मानों में लिखें, जैसे,

String s = "chrome";
Desktop desktop = Desktop.getDesktop();
desktop.browse(URI.create(s));

यह प्रोग्राम को निष्पादित करने के बाद खाली URL के साथ स्वचालित रूप से ब्राउज़र खोलेगा


1

विंडोज़ पर "cmd / k start http://www.example.com " शुरू करें, वास्तव में आप प्रारंभ कमांड का उपयोग करके हमेशा "डिफ़ॉल्ट" कार्यक्रमों को लागू कर सकते हैं। Ex start abc.mp3 के लिए डिफ़ॉल्ट एमपी 3 प्लेयर को इनवॉइस करेगा और अनुरोधित एमपी 3 फ़ाइल को लोड करेगा।


आपने पहले ही पोर्टेबल संस्करण पोस्ट कर दिया है। मैंने अभी एक और समाधान प्रस्तावित किया है जिसे ध्यान में रखा जा सकता है यदि इसके लिए केवल उन यूआरएल को ही नहीं जिन्हें आपको डिफ़ॉल्ट कार्यक्रमों में खोलने की आवश्यकता है।
d-live

1

आशा है कि आप बुरा न मानें, लेकिन मैंने ऊपर से सभी सहायक सामग्री को एक साथ सिल दिया, और परीक्षण के लिए पूरी तरह तैयार कक्षा के साथ आया ...

import java.awt.Desktop;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

public class MultiBrowPop {

    public static void main(String[] args) {
        OUT("\nWelcome to Multi Brow Pop.\nThis aims to popup a browsers in multiple operating systems.\nGood luck!\n");

        String url = "http://www.birdfolk.co.uk/cricmob";
        OUT("We're going to this page: "+ url);

        String myOS = System.getProperty("os.name").toLowerCase();
        OUT("(Your operating system is: "+ myOS +")\n");

        try {
            if(Desktop.isDesktopSupported()) { // Probably Windows
                OUT(" -- Going with Desktop.browse ...");
                Desktop desktop = Desktop.getDesktop();
                desktop.browse(new URI(url));
            } else { // Definitely Non-windows
                Runtime runtime = Runtime.getRuntime();
                if(myOS.contains("mac")) { // Apples
                    OUT(" -- Going on Apple with 'open'...");
                    runtime.exec("open " + url);
                } 
                else if(myOS.contains("nix") || myOS.contains("nux")) { // Linux flavours 
                    OUT(" -- Going on Linux with 'xdg-open'...");
                    runtime.exec("xdg-open " + url);
                }
                else 
                    OUT("I was unable/unwilling to launch a browser in your OS :( #SadFace");
            }
            OUT("\nThings have finished.\nI hope you're OK.");
        }
        catch(IOException | URISyntaxException eek) {
            OUT("**Stuff wrongly: "+ eek.getMessage());
        }
    }

    private static void OUT(String str) {
        System.out.println(str);
    }
}

1

मैं बृजेश कुमार के जवाब को क्लोजर में उपरोक्तानुसार पढ़ता हूं :

(defn open-browser 
  "Open a new browser (window or tab) viewing the document at this `uri`."
  [uri]
  (if (java.awt.Desktop/isDesktopSupported)
    (let [desktop (java.awt.Desktop/getDesktop)]
      (.browse desktop (java.net.URI. uri)))
    (let [rt (java.lang.Runtime/getRuntime)]
      (.exec rt (str "xdg-open " uri)))))

अगर यह किसी के लिए उपयोगी है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.