2016-03-14 6 views
5

मैं विंडोज बैच प्रोग्रामिंग के लिए बिल्कुल नया हूं। जो मैं प्राप्त करना चाहता हूं वह जावा एप्लिकेशन के लिए स्टार्टअप स्क्रिप्ट लिखना है। फिर भी, यह जावा अनुप्रयोग शुरू करता है, बल्किविंडोज बैच और जावा: संयोजन -XX: OnOutOfMemoryError कमांड और बैच पैरामीटर

प्रयोग बाहर प्रिंट: जावा [-options] वर्ग [args ...]

(एक वर्ग निष्पादित करने के लिए)

या जावा [-options] जार jarfile [args ...]

(एक जार फ़ाइल निष्पादित करने के लिए)

...

जो इंगित करता है कि मेरे पैरामीटर सही ढंग से पहचाने नहीं गए हैं।


यहाँ नहीं काम स्क्रिप्ट के लिए मेरे MCVE है:

set memory=600000 
java -XX:OnOutOfMemoryError="taskkill /PID %p" -Xmx%memory%K -jar MyApp.jar 

असली परिदृश्य में, memory आवेदन के लिए इष्टतम अधिक से अधिक ढेर आकार सेट करने के लिए की जाती है।


दोनों पैरामीटर में से एक को छोड़ना ऐप शुरू करता है। तो

java -XX:OnOutOfMemoryError="taskkill /PID %p" -jar MyApp.jar 

और

set memory=600000 
java -Xmx%memory%K -jar MyApp.jar 

काम करता है, लेकिन मैं एक कॉल में काम करने के लिए दोनों मानकों की जरूरत है।

+0

डालने की कोशिश करो '@echo on' /' @ off' में गूंज अपने स्क्रिप्ट ([यहां वर्णित] (http://stackoverflow.com/a/10237457/3788176)) और देखें कि यह वास्तव में "दोनों पैरामीटर" मामले में क्या निष्पादन कर रहा है। –

+0

इनपुट के लिए धन्यवाद! 'Jech -XX: onOutOfMemoryError =" taskkill/pID memoryK -jar MyApp.jar' में प्रिंटिंग में '@echo' के परिणामों का उपयोग करना, जो ''' के साथ कुछ गलती को इंगित करता है, जो अब बंद नहीं है, और पैरामीटर, जो है जोड़ा नहीं गया ('% स्मृति%)' ... –

+2

ऐसा लगता है कि '%' में '%' '%' को 'प्रतिस्थापन के लिए" खोलने "'% 'माना जाता है - मुझे लगता है कि' %% 'एक' '' 'के लिए टोकन है (जैसे' printf' जैसी विधियों)। –

उत्तर

2

यदि आप अपनी स्क्रिप्ट में @echo on और @echo off डालते हैं तो आप देख सकते हैं कि वास्तव में कौन सा आदेश निष्पादित किया जा रहा है।

आप कहते हैं कि जिसके परिणामस्वरूप आदेश है:

java -XX:OnOutOfMemoryError="taskkill /PID memoryK -jar MyApp.jar 

जो यह %p की % की तरह लग रहे बनाता है एक "उद्घाटन" % प्रतिस्थापन के लिए विचार किया जा रहा है।

उद्धरणों के संतुलित होने के अलावा, इसका मतलब यह है कि आप java को चलाने के लिए प्रभावी रूप से नहीं दे रहे हैं - -jar MyApp.jar वास्तव में -XX:OnOutOfMemoryError स्ट्रिंग के अंदर है।

%% के साथ एकल % के बजाय ऐसे - this question के अनुसार, कि एक शाब्दिक % एक बैट फ़ाइल में लिखने के लिए कैसे:

java -XX:OnOutOfMemoryError="taskkill /PID %%p" -Xmx%memory%K -jar MyApp.jar 
+0

मैं अभी एक टिप्पणी लिख रहा हूं, इससे समस्या हल हो जाती है! OnOutOfMemoryError पैरामीटर के भीतर पहला '%' '%%' से बचाना था। धन्यवाद! –

+0

कोई समस्या नहीं है। कृपया जवाब स्वीकार करने पर विचार करें :) –

+2

नहीं मैं नहीं करूँगा! बस मजाक कर, बस कुछ मिनट इंतजार करना होगा इससे पहले कि मैं ऐसा कर सकूं: पी –

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