2011-03-29 14 views
5

हे दोस्तों पर। मैं जावा में एक प्रोग्राम पर काम कर रहा हूं जिसे लिनक्स पर्यावरण पर इस्तेमाल किया गया है जो एक नई जावा प्रक्रिया बनाता है जो एक और जावा क्लास चलाता है, लेकिन मुझे इसके साथ परेशानी हो रही है। आखिर में मैंने अपने सभी मुद्दों को इस पर तय कर दिया है। मेरी जावा प्रोग्राम मेंजावा Runtime.exec लिनक्स

Runtime.getRuntime().exec(new String[] { "/bin/bash", "-c", "'java -classpath /home/kevin/workspace/Misc/bin HelloWorld'" }) 

लागू रिटर्न

/bin/bash: /usr/lib/jvm/java-6-openjdk/jre/bin/java -classpath /home/kevin/workspace/Misc/bin HelloWorld: No such file or directory 

या तो stdout/stderr में। अगर मैं

Runtime.getRuntime().exec(new String[] { "/bin/bash -c 'java -classpath /home/kevin/workspace/Misc/bin HelloWorld'" }) 

कोशिश मैं

Cannot run program "/bin/bash -c 'java -classpath /home/kevin/workspace/Misc/bin HelloWorld'": java.io.IOException: error=2, No such file or directory 
    ... 
Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory 

और अंत में एक जावा अपवाद मिलता है, का उपयोग करते हुए एक सरल

Runtime.getRuntime().exec("/bin/bash -c 'java -classpath /home/kevin/workspace/Misc/bin HelloWorld'") 

मुझे एक

-classpath: -c: line 0: unexpected EOF while looking for matching `'' 
-classpath: -c: line 1: syntax error: unexpected end of file 

stdout से/stderr देता है।

इस बीच, एक नया एक लाइन .sh फ़ाइल बनाने (और उचित अनुमतियां बताए) के साथ ही इस (कोई # फ़ाइल के शीर्ष पर!/Bin/bash)

/bin/bash -c 'java -classpath /home/kevin/workspace/Misc/bin HelloWorld' 

साथ सही उत्पादन देता है त्रुटियाँ नहीं।

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

उत्तर

11

आपका पहला प्रयास लगभग सही था।

Runtime.getRuntime().exec(new String[] { "/bin/bash", "-c", "java -classpath /home/kevin/workspace/Misc/bin HelloWorld" }) 

आप के हवाले क्योंकि व्यक्तिगत String तर्क गुजर प्रभावी रूप से यह स्वचालित रूप से उद्धरण अतिरिक्त जरूरत नहीं है।

+2

महोदय, आप सबसे महान हैं। मुझे विश्वास नहीं है कि जवाब इतना आसान था! बहुत बहुत धन्यवाद, मैंने कभी ऐसा कुछ करने का विचार नहीं किया होगा। –

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