2013-11-09 24 views
5

जावा 7u40 में अंतिम सुरक्षा परिवर्तनों के बाद, इसे जेएनएलपी फ़ाइल पर हस्ताक्षर करने की आवश्यकता है। यह या तो जेएनएलपी-आईएनएफ/APPLICATION.JNLP में अंतिम जेएनएलपी जोड़कर या हस्ताक्षर किए गए मुख्य जार में जेएनएलपी-आईएनएफ/APPLICATION_TEMPLATE.JNLP में टेम्पलेट जेएनएलपी प्रदान करके किया जा सकता है।जेएनएलपी टेम्पलेट फ़ाइल में वाइल्डकार्ड

पहला तरीका अच्छी तरह से काम करता है, लेकिन हम अपने आवेदन में पहले से अज्ञात संख्या रनटाइम तर्कों को पारित करने की अनुमति देना चाहते हैं।

इसलिए, हमारी APPLICATION_TEMPLATE.JNLP इस तरह दिखता है:

<?xml version="1.0" encoding="UTF-8"?> 
<jnlp codebase="*"> 
    <information> 
     <title>...</title> 
     <vendor>...</vendor> 
     <description>...</description> 
     <offline-allowed /> 
    </information> 
    <security> 
     <all-permissions/> 
    </security> 
    <resources> 
     <java version="1.7+" href="http://java.sun.com/products/autodl/j2se" /> 
     <jar href="launcher/launcher.jar" main="true"/> 
     <property name="jnlp...." value="*" /> 
     <property name="jnlp..." value="*" /> 
    </resources> 
    <application-desc main-class="..."> 
     * 
    </application-desc> 
</jnlp> 

समस्या है आवेदन-desc टैग के अंदर *।

यह कई तर्क टैग का उपयोग तर्क की एक निश्चित संख्या वाइल्डकार्ड संभव है (नीचे दिए गए कोड को देखें), लेकिन फिर यह आवेदन (जावा Webstart को कम या ज्यादा तर्क प्रदान करने के लिए संभव नहीं है जाएगा एक खाली के साथ कोई शुरुआत तर्क टैग)।

<application-desc main-class="..."> 
     <argument>*</argument> 
     <argument>*</argument> 
     <argument>*</argument> 
    </application-desc> 

कोई इस समस्या को इस बात की पुष्टि करता है सकते हैं और/या जावा आवेदन करने के लिए क्रम तर्क के एक पहले से अपरिभाषित संख्या पारित करने के लिए एक समाधान है?

बहुत बहुत धन्यवाद!

उत्तर

8

जेएनएलपी 7 विनिर्देश पढ़ने के बाद मैं क्या देख सकता हूं, ऐसा लगता है कि आप क्या नहीं कर सकते हैं। तारांकन केवल टेक्स्ट डेटा का प्रतिनिधित्व कर सकता है, न कि एकाधिक XML तत्वों।

आपकी स्थिति में, मैं main विधि को एक तर्क के अपने स्वयं के विश्लेषण करने में सक्षम बनाता हूं ताकि कस्टम सेपरेटर का उपयोग करके इसे कई मानों के रूप में माना जा सके। कुछ इस तरह:

<application-desc main-class="com.example.app.Main"> 
    <argument>--args</argument> 
    <argument>*</argument> 
</application-desc> 

और अपने वास्तविक .jnlp फ़ाइल की तरह कुछ हो सकता है:

public static void main(String[] args) { 
    if (args.length == 2 && args[0].equals("--args")) { 
     args = args[1].split(";;"); 
    } 

    // Continue as normal 
} 

इस को रोकने के लिए टेम्पलेट की अनुमति देता है

<application-desc main-class="com.example.app.Main"> 
    <argument>--args</argument> 
    <argument>files.txt;;29;;true;;1384212567908</argument> 
</application-desc> 
+0

आप सही है कि यह एक है कर रहे हैं संभव कामकाज, और यदि वास्तव में कोई जेएनएलपी-एकमात्र तरीका नहीं है, तो मैं इसके लिए आपके समाधान का उपयोग करूंगा। धन्यवाद! – Andy

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