2008-10-21 18 views
11

यह निर्धारित करने का सबसे अच्छा तरीका क्या है कि मशीन पर स्थापित जेआरई का संस्करण उस एप्लिकेशन के लिए पर्याप्त है जो उपयोगकर्ता चलाने के लिए चाहता है? जावा-केवल सामान का उपयोग करके इसे करने का कोई तरीका है? मैं विंडोज/लिनक्स/मैकोज़क्स पर काम करने का समाधान चाहता हूं - यदि जेआरई संस्करण बहुत कम है तो एक संदेश प्रदर्शित होना चाहिए। वर्तमान में मुझे अपवाद मिल रहा है अगर मैं इसे जावा 1.5 पर चलाने की कोशिश करता हूं (ऐप जावा 1.6 के लिए बनाया गया है)। यदि कोई सार्वभौमिक समाधान नहीं है, तो विंडोज़ पर ऐसा करने का सबसे अच्छा तरीका क्या है?लॉन्च से पहले जेआरई संस्करण कैसे जांचें?

उत्तर

1

एक उच्च संस्करण जेआरई के लिए बनाया गया एक एप्लीकेशन निम्न संस्करण जेआरई पर नहीं चलाया जाएगा। इसलिए आप जेआरई संस्करण की जांच के लिए अपने आवेदन में कोड जोड़ने में सक्षम नहीं होंगे - यदि जेआरई संस्करण असंगत था, तो आपका जेआरई-वर्जन-चेकिंग कोड पहले स्थान पर नहीं चलेगा।

आपको क्या करना होगा कुछ ऐसे लॉन्चर एप्लिकेशन हैं जो निम्न संस्करण जेआरई (1.3?) के लिए बनाया गया है जो संस्करण की जांच करता है और फिर आवश्यक होने पर आपके ऐप को लॉन्च करता है। यह मेरे लिए तरह की तरह लगता है।

स्थापना के दौरान संस्करण की जांच करने के बारे में क्या? क्या आप ऐप को ऐसे तरीके से इंस्टॉल कर रहे हैं जो आपको पर्यावरण चर की जांच करने या किसी भी प्रकार की स्क्रिप्टिंग करने की अनुमति देता है?

+0

यह आवश्यक नहीं है। ज्यादातर मामलों में यह ठीक काम करेगा। यह तभी होता है जब आप परेशानी की तुलना में अधिक हालिया भाषा या एपीआई सुविधाओं का उपयोग कर रहे हों। – fiddlesticks

+0

सच नहीं है। यदि मैं जेडीके 1.6 के साथ एक सरल हैलो वर्ल्ड एप्लिकेशन संकलित करता हूं, और इसे जेडीके 1.4 के साथ चलाने का प्रयास करता हूं, तो मुझे एक असमर्थित क्लासवर्सन एरर मिलता है। आप जो कह रहे हैं वह केवल तभी काम करेगा जब मैंने 1.6 के साथ संकलित किया लेकिन निर्दिष्ट लक्ष्य 1.4। –

+0

फिर भी, मुख्य श्रेणी को संकलित करने से आपको क्या रोकता है 1।3, इसमें सभी चेक करें, और फिर शेष एप्लिकेशन को कॉल करें (उदाहरण के लिए 1.6)? –

2

आम तौर पर, हमने इसे सी या (जब यूनिक्स-केवल) खोल रैपर के साथ संपर्क किया है। यकीन नहीं है कि यह वास्तव में आपके लिए काम करेगा।

हम अपने उत्पाद में जेआरई एम्बेड करके भी इसका संपर्क करते हैं। 99.9% मामलों का ख्याल रखता है (समय का दूसरा 0.1% उपयोगकर्ता एक अलग जेवीएम का उपयोग करने के लिए हमारी कॉन्फ़िगरेशन को स्पष्ट रूप से बदल रहा है)। दोबारा, सुनिश्चित नहीं है कि यह आपके लिए एक उचित समाधान है।

हमारे मामले में, मूल कोड (जेएनआई और अन्यथा) की महत्वपूर्ण मात्रा है, इसलिए हम जिस प्लेटफॉर्म का समर्थन करते हैं, उसके लिए एक स्थापित करने योग्य छवि को सिलाई करना आवश्यक है। लेकिन यदि आप शुद्ध-जावा समाधान से निपट रहे हैं, तो आपको बस अपना न्यूनतम दस्तावेज देना होगा और लोगों को प्रोग्राम के साथ आने के लिए कहें (कोई इरादा नहीं है) यदि वे आपकी सामग्री को चलाने के लिए हैं। यह लोगों की तरह शिकायत है कि मेरा मैक एमएसवीसी नहीं चलाएगा, या मेरे लिनक्स बॉक्स में वर्ल्ड वार्कक्राफ्ट चलाने में समस्याएं आ रही हैं। यह सिर्फ (आभासी) मशीन नहीं है जिसके लिए सॉफ़्टवेयर लक्षित है - आपको स्विच करने की आवश्यकता है। कम से कम जावा दुनिया में, हम वास्तव में इसे अपग्रेड कर सकते हैं, हालांकि, किसी के ओएस-धार्मिक भावनाओं को चोट पहुंचाए बिना। (मैक उपयोगकर्ता को एमएसवीसी चलाने के लिए विंडोज एक्सपी में "अपग्रेड" करने का प्रयास करें - एक बीट-डाउन होने का इंतजार है।)

0

System.getProperties() आपको जेवीएम गुणों की एक सूची देता है जिसमें विभिन्न संस्करण आईडी शामिल हैं जेआरई, जेवीएम और विनिर्देश। यह जावा के सभी संस्करणों के लिए कार्यान्वित किया गया है, इसलिए संस्करण में संकलित संस्करण और संस्करण में या बिना कार्यान्वयन के काम करना चाहिए।

यदि आप संस्करण का परीक्षण करने के लिए एक मूल कक्षा लिखते हैं, तो आप इसे पहले अपने मुख्य() लॉन्चिंग क्लास में कॉल कर सकते हैं। यह वास्तव में बुनियादी कार्यक्षमता होना चाहिए हालांकि आप इसे तोड़ने का जोखिम उठा सकते हैं।

5

आप कॉमन्स-लॉन्चर का उपयोग करने पर भी विचार कर सकते हैं, जो आपको विभिन्न पर्यावरण सेटिंग्स सेट करने की अनुमति देता है, या आपके आवेदन को कॉल करने से पहले प्री-चेक करता है।

http://commons.apache.org/launcher

1

लांचर के लिए - वहाँ में संस्करण की जाँच करें।

एपीपी के अंदर; उपरोक्त उपयोग के रूप में System.getProperties();

Properties sProp = java.lang.System.getProperties(); 
String sVersion = sProp.getProperty("java.version"); 
sVersion = sVersion.substring(0, 3); 
Float f = Float.valueOf(sVersion); 
if (f.floatValue() < (float) 1.4) { 
    System.out.println("Java version too low ...."); 
    System.exit(1); 
} 
... 
+0

यह बहुत आसान है। यदि यह सटीक संस्करण नहीं है, या उन्होंने इसे उस स्थान पर इंस्टॉल नहीं किया है, या आप विंडोज़ नहीं चला रहे हैं, तो यह असफल हो जाएगा। एक संशोधन जो कि काम कर सकता है, जावा-वी के आउटपुट को कुछ में पाइप करना और उसका विश्लेषण करना है, लेकिन फिर भी संस्करण "या बाद में" ढूंढना मुश्किल होगा। –

+0

और देखें कि उसने क्या पूछा - लिनक्स/जीत/मैक प्लेटफॉर्म या कम से कम विंडोज़। अधिकांश कॉर्पोरेट सामान "सटीक स्थान" में स्थापित है। लिनक्स और मैक एक ही काम करते हैं। – jim

11

आप प्रतिबिंब और दो कंपाइलर का उपयोग करके ऐसा कर सकते हैं। सबसे पुराने जावा संस्करण के साथ एक मुख्य श्रेणी संकलित करें जिसे आप सभी के साथ चलाने में सक्षम होना चाहते हैं।यह System.getProperty("java.version"), या जो भी हो, का उपयोग कर संस्करण की जांच करता है, और उसके बाद वास्तविक मुख्य वर्ग लोड करने के लिए प्रतिबिंब का उपयोग करता है, यदि वह चेक पास हो जाता है, संभवतः सीधे जार भी लोड कर रहा है। जेआरई को किसी भी वर्ग को लोड नहीं करना चाहिए जिसे संकलित समय पर आपके बाहरी मुख्य वर्ग द्वारा संदर्भित नहीं किया गया था।

+2

आपको जरूरी नहीं कि दो कंपाइलर्स की आवश्यकता हो। जावा-कंपाइलर एक-लक्ष्य-विकल्प का समर्थन करता है, जो आपको उत्पादित क्लास-फाइलों के बाइटकोड-संस्करण को निर्दिष्ट करने की अनुमति देता है। – Mnementh

+0

धन्यवाद। यह लाइन काम करता है। मैं प्रोग्राम लोड करता हूं और प्रोग्राम को आवश्यक संस्करण के साथ स्ट्रिंग को सत्यापित करता हूं। – elcool

0

हम्म .. मुझे एक उबाऊ लड़का कहें, लेकिन उदाहरण के लिए लॉन्च 4 जे या किसी अन्य मूल लॉन्चर का उपयोग करने में क्या गड़बड़ है।

वास्तव में अपना कोड चलाने से पहले JVM संस्करण की जांच करने के लिए मूल लॉन्चर का उपयोग करें। जावा केवल समाधान (मेरी पुस्तक में) केवल डेवलपर्स से निपटने पर ही समझ में आता है; एक बार जब आप अंत उपयोगकर्ताओं को मार देते हैं, तो आपको पता चलेगा कि उन्हें जावा या उसके तकनीकी विवरणों की परवाह नहीं है। यदि आपने जीडब्लू-बेसिक में अपना आवेदन लिखा होगा तो आपका आवेदन तब तक कम नहीं होगा जब तक आपका एप्लिकेशन काम नहीं करता है।

यदि जावा 1.6 स्थापित नहीं है, तो lauchner4j उपयोगकर्ता को जेडीके 1.6 के लिए डाउनलोड पेज पर इंगित करेगा। जावा में जादू करने की तुलना में आपकी समस्या के लिए शायद अधिक उपयुक्त है।

9

आप Java Webstart पर विचार कर सकते हैं। भले ही नाम एप्लेट्स की तरह कुछ तात्पर्य है, यह स्टैंडअलोन-अनुप्रयोगों के बारे में है। वेबस्टार्ट एक लॉन्चर है, जो एक जेएनएलपी-फ़ाइल (एक साधारण एक्सएमएल-फाइल, जहां आप अपने ऐप के डाउनलोड-स्थान को कॉन्फ़िगर करते हैं, आवश्यक जावा-संस्करण और कुछ अन्य मेटाडाटा) को चेक करते हैं और आपके ऐप को सही जेआरई से शुरू करते हैं। यदि कोई नया संस्करण उपलब्ध है, तो यह एप्लिकेशन को भी अपडेट करता है। नकारात्मकता है, आपको एक जेएनएलपी फ़ाइल लिखनी है। यहां एक उदाहरण दिया गया है:

<?xml version="1.0" encoding="utf-8"?> 

<!-- 
############################################################################### 
# 
# @(#)draw.jnlp 1.6 02/09/11 
# 
# JNLP File for Draw Demo Application 
# 
############################################################################### 
--> 


<jnlp spec="0.2 1.0" 
     codebase="http://java.sun.com/javase/technologies/desktop/javawebstart/apps" 
     href="draw.jnlp"> 
    <information> 
     <title>Draw 4 App</title> 
     <vendor>Sun Microsystems, Inc.</vendor> 
     <homepage href="http://java.sun.com/javase/technologies/desktop/javawebstart/demos.html"/> 
     <description>A minimalist drawing application along the lines of Illustrator</description> 
     <description kind="short">Draw Demo Short Description</description> 
     <icon href="images/draw.jpg"/> 
     <offline-allowed/> 
    </information> 
    <resources> 
     <j2se version="1.3+" href="http://java.sun.com/products/autodl/j2se"/> 
     <j2se version="1.3+"/> 
     <jar href="draw.jar" main="true" download="eager"/> 
    </resources> 
    <application-desc main-class="Draw"/> 
</jnlp> 

लॉन्चर-प्रोग्राम का उपयोग करने की दूसरी संभावना है। एक उदाहरण Apache Commons Launcher है। आप स्वयं कुछ लॉन्चर ऐप भी लिख सकते हैं, लेकिन आमतौर पर यह प्रयास के लायक नहीं है।

0

मुझे लगता है कि WinRun4J मेरे लिए काफी अच्छा काम करता है (लेकिन फिर मैंने इसे लिखने के बाद पक्षपातपूर्ण हो सकता है :-))। यह आपको जावा के न्यूनतम और/या अधिकतम संस्करण को निर्दिष्ट करने देता है। यदि उपयुक्त जेआरई संस्करण नहीं मिला है (और संदेश अनुकूलन योग्य है) तो यह उपयोगकर्ता को एक संदेश बॉक्स पॉप अप करेगा।

2

जावा कमांड चलाते समय आपको जावा संस्करण की आवश्यकता हो सकती है, उदा। java -version:1.6* com.me.MyClass। सुनिश्चित नहीं है कि यह जावा के सभी रिलीज़ पर काम करता है, लेकिन यह वैसे भी 1.6 पर ठीक काम करता है।

1

जावा 1.2 के लिए एक लॉन्चिंग क्लास संकलित है जो आपके 1.6 कक्षाओं में वास्तविक मुख्य() को आमंत्रित करता है। यदि असमर्थित वर्ग अपवाद फेंक दिया जाता है तो उन्हें पकड़ लें और एक अच्छा त्रुटि संदेश प्रदर्शित करें।

1

यहां सिस्टम में जेआरई संस्करण स्थापित करने के लिए कोड है।

var list = deployJava.getJREs(); 
var result = ""; 
result = list[0]; 
for (var i=1; i<list.length; i++) 
{ 
    result += ", " + list[i]; 
} 
document.write("jre version : "+result); 
0

उपर्युक्त सभी बहुत जटिल हैं। बस जाना:

Properties props = System.getProperties() 
props.list(System.out) 

और आप अपने JVM, JRE, JDK और कर्मचारियों के बारे में सब कुछ देखेंगे। या उपयोग करके एक विशिष्ट मान प्राप्त करें:

//full list of possible props you can see if u run code above 
String props = System.getProperty(prop) 
+0

कोड का वह हिस्सा जोड़ें जो केवल जावा संस्करण प्राप्त करता है। –

+0

स्ट्रिंग प्रोप = System.getProperty ("java.version") – Alex

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