2008-11-18 5 views
10

जावा प्रोग्राम से, मुझे स्थानीय HTML फ़ाइल पर डिफ़ॉल्ट ब्राउज़र लॉन्च करने की आवश्यकता है, जो फ़ाइल के अंदर एक एंकर की ओर इशारा करता है। जावा एसई 6 में, java.awt.Desktop.browse विधि फ़ाइल खोल देगा, लेकिन एंकर का सम्मान नहीं करेगा, इसलिए निम्न की तरह कुछ फ़ाइल शीर्ष पर फ़ाइल खोलता है, लेकिन ब्राउज़र को एंकर पर पृष्ठ नहीं देता है:जावा से एंकर के साथ फ़ाइल प्रोटोकॉल यूआरएल कैसे लॉन्च करें?

Desktop.getDesktop("file:///C:/foo/bar.html#anchor"); 

सूर्य कहता है http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6477862 कि फाइल यूआरआई प्रोटोकॉल में एंकर समर्थित नहीं हैं।

क्या किसी के पास कोई बेहतर जवाब है?

मैं जावा एसई 6 का उपयोग कर सकता हूं। मैं विंडोज़ केवल समाधान के साथ ठीक हूं।

उत्तर

1

Windows के लिए केवल, आप

System.exec("cmd.exe start file:///C:/foo/bar.html#anchor") 
+0

यह संक्षेप में एक कंसोल विंडो दिखाएगा। – Joey

0

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

+0

विंडोज 7 में मेरे लिए काम नहीं करता है, एंकर छीन लिया जाता है। मुझे लगता है कि यह एक ओएस मुद्दा है, ProcessMonitor एंकर के बिना फ़ायरफ़ॉक्स पर मेरी कॉल दिखाता है। – glenneroo

+0

हालांकि यह समस्या को हल करने के लिए एक महत्वपूर्ण संकेत हो सकता है, एक अच्छा जवाब भी समाधान का प्रदर्शन करता है। कृपया अपना नाम दिखाने के लिए उदाहरण कोड प्रदान करने के लिए [संपादित करें]। वैकल्पिक रूप से, इसे इसके बजाय टिप्पणी के रूप में लिखने पर विचार करें। –

1

समाधान है:

rundll32 URL.dll, FileProtocolHandler "file: /// एक्स: /temp/fragtest.htm#frag"

मन उद्धरण !!!

rundll32 URL.dll, FileProtocolHandler फ़ाइल: /// x: /temp/fragtest.htm#frag अपेक्षित कार्य करता है।

0

मैंने इस आइटम पर कुछ जांच की है here - ध्यान दें कि cmd खोलना और start file:///c:/temp/test.html#anchor टाइप करना भी काम नहीं करता है।

मुझे लगता है कि वास्तव में काम करने वाली एकमात्र चीज ब्राउज़र को मैन्युअल रूप से कॉल करना है (या ऐसा करने वाले किसी तृतीय-पक्ष टूल का उपयोग करें)।

विंडोज़ पर, आपके पास हमेशा इंटरनेट एक्सप्लोरर होता है, इसलिए आप Runtime.getRuntime().exec("cmd.exe start iexplore " + myURL) पर कॉल कर सकते हैं यदि आप वास्तव में iexplore.exe को नहीं ढूंढना चाहते हैं - लेकिन यह हमेशा काम नहीं करता है।

3

मैंने अभी यह एक और तरीका हल किया है, क्योंकि इनमें से किसी भी उदाहरण में उद्धरण या रिक्त स्थान की कोई मात्रा मेरे लिए काम नहीं करती है।

1 का पता लगाने अगर फाइल यूआरआई एक लंगर या क्वेरी स्ट्रिंग

2 यदि ऐसा है तो, एक के साथ एक अस्थायी फ़ाइल File tmpfile = File.createTempFile("apphelp", ".html") बनाने वास्तविक फ़ाइल के लिए मेटा-रीडायरेक्ट यूआरआई मैं इच्छा:

<html><head> 
<meta http-equiv="refresh" content="0;url=help.html#set_filter" /> 
</head></html> 

3 नए अस्थायी यूआरआई का उपयोग कर स्थानीय रंडल कमांड निष्पादित करें:

Runtime.getRuntime().exec(
    "rundll32 url.dll,FileProtocolHandler \"" 
    +tmpfile.toURI().toString()+ "\""); 

मुझे आशा है कि यह आपके लिए काम करता है!

+0

यह 'डेस्कटॉप.ब्रौस() 'के साथ भी काम करता है - कम से कम विंडोज़ पर –

संबंधित मुद्दे