2012-06-14 12 views
5

से इनकार मेरे कार्यक्रम ubuntu 10.04 पर चल रहा है फेंकता है, और यहाँ कोड है:जावा रनटाइम कार्यकारी ऐसी कोई फाइल नहीं या अनुमति

Process process=Runtime.getRuntime().exec("ls",null,null); 

इसके बारे में एक अपवाद फेंक:

Cannot run program "ls": java.io.IOException: error=2, No such file or directory, 

और मैं करने की कोशिश की "ls" को "chmod", "pwd" में बदलने के लिए, मुझे कोई भी शेल कमांड काम नहीं मिला, सभी एक ही समस्या में आए। (मैंने "/ bin/sh -c ls" भी कोशिश की)

और फिर मैं कोड को

में बदलें
Process process=Runtime.getRuntime().exec("/bin/ls",null,null); 

इसके बारे में एक अपवाद फेंक: सभी संबंधित फ़ाइलें और 777 के लिए निर्देशिका के

Cannot run program "/bin/ls": java.io.IOException: error=13, Permission denied 

मैं बदल गया है विशेषाधिकार इसलिए मैं वास्तव में यह क्या हो गया है पता नहीं है।

आपके उत्तरों के लिए धन्यवाद।

उत्तर

2
Process process=Runtime.getRuntime().exec("ls",null,null); 

यह आशा की जाती है एक No such file or directory अपवाद देने के बाद से ls नहीं अपने कार्यक्रम के वर्तमान कार्यशील निर्देशिका में सबसे अधिक संभावना है। जब आप लिनक्स शेल प्रॉम्प्ट से ls टाइप करते हैं, तो यह PATH पर्यावरण चर का उपयोग ls/bin/ls में बदलने के लिए करता है। Runtime यह आपके लिए नहीं करता है।

आपको पूरा पथ "/bin/ls" निर्दिष्ट करने की आवश्यकता है। जैसा कि @ एर्नेस्ट ने उल्लेख किया है, आपको Runtime.exec("/bin/ls") विधि का उपयोग करना चाहिए और नल तर्कों में गुजरना नहीं चाहिए।

Process process=Runtime.getRuntime().exec("/bin/ls"); 

आपकी टिप्पणी से संकेत मिलता है कि जब भी आप इस कॉल का उपयोग करें, यदि आप एक Permission denied अपवाद हो रही है लग रहे हैं। यह मेरे लिए एक मानक जावा निष्पादन योग्य से काम करता है। मुझे लगता है कि आप लिनक्स कमांड लाइन से /bin/ls सफलतापूर्वक कर सकते हैं? /bin/ls (और संबंधित निर्देशिका) 755 और 777 नहीं होना चाहिए जो एक सुरक्षा दुःस्वप्न होगा। लेकिन 777 काम करना चाहिए।

शायद आप किसी प्रकार की संरक्षित जेडीके चला रहे हैं? एप्लेट्स, उदाहरण के लिए, सुरक्षा कारणों से यूनिक्स कमांड निष्पादित करने की अनुमति नहीं है। हो सकता है कि आपके पास एक प्रतिबंधित Java policy file है और आपको execute अनुमतियां जोड़ने की आवश्यकता है?

+0

आपके उत्तर के लिए धन्यवाद, मुझे लगता है कि मेरा ग्रहण का निर्माण-कंपाइलर मानक सूरज-जेडके नहीं है, यह खुला jdk है, अब मैं सूरज-जेडके-जावैक के साथ अपने प्रोग्राम को संकलित करने के लिए चींटी का उपयोग करता हूं, यह ठीक है, बहुत बहुत धन्यवाद। – libing

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