2012-03-23 17 views
8

त्वरित उत्तराधिकार में एक और सवाल है लेकिन यह वास्तव में एक स्पष्ट त्रुटि होना है जिसे मैं नहीं देख रहा हूं। मैंने नीचे एक बैच फ़ाइल चलाने के लिए कुछ कोड लिखा है लेकिन मुझे एक त्रुटि संदेश मिल रहा है जिसमें कहा गया है कि यह फ़ाइल नहीं ढूंढ पा रहा है लेकिन मैं आपको आश्वस्त कर सकता हूं कि फ़ाइल निर्देशिका में मौजूद है!Processbuilder फ़ाइल नहीं ढूंढ सकता है ?!

public class Pull { 

public void pullData() throws IOException { 
    ProcessBuilder pb = new ProcessBuilder("adb.bat"); 
    File f = new File("C:\\"); 
    pb.directory(f); 
    Process p = pb.start(); 
} 

public static void main(String[] args) throws IOException { 
    Pull pull = new Pull(); 
    pull.pullData(); 
} 

}

और यहाँ त्रुटि संदेश

Exception in thread "main" java.io.IOException: Cannot run program "adb.bat" (in directory "C:\"): CreateProcess error=2, The system cannot find the file specified 
+0

तो, adb.bat c: \ है, है ना? प्रोजेक्ट फ़ोल्डर – keyser

+0

में इसे रखने या इसकी प्रतिलिपि बनाने का प्रयास करें या तो वहां काम नहीं करता है। क्या मैं प्रक्रियाबिल्डर का सही ढंग से उपयोग कर रहा हूं? – Rookie

+0

क्या आपने बैच फ़ाइल की सामग्री को अपने 'प्रोसेसबिल्डर' के तर्क के रूप में निष्पादित करने का प्रयास किया है? उदाहरण के लिए, अगर "adb.bat" कुछ "जावा-वर्जन" जैसा करता है, तो क्या आपने 'नया प्रोसेसबिल्डर ("जावा", "- सर्वर") जैसे कुछ करने की कोशिश की है? मैं सोच रहा हूं कि जावा adb.bat को निष्पादन योग्य की तरह व्यवहार करने का प्रयास कर रहा है, भले ही यह वास्तव में केवल एक टेक्स्ट-आधारित स्क्रिप्ट है। – CodeBlind

उत्तर

11

मैं लिनक्स चल रहा हूँ है, लेकिन एक ही त्रुटि तब होती है जब मैं अपने कोड चलाने (बजाय एक .sh चलाने के लिए संशोधित ।बल्ला)।

प्रयास करें:

ProcessBuilder pb = new ProcessBuilder("c:\\adb.bat"); 

जाहिर है का उपयोग कर ProcessBuilder.directory कार्यशील निर्देशिका है कि जब बिल्डर निर्माण किया गया था चुना गया था (निष्पादन की खोज के प्रयोजनों के लिए ) को प्रभावित नहीं करता (कम से कम, कि क्या लगता है दस्तावेज़ों का कहना है कि यह कार्यशील निर्देशिका को बदल देगा, इसलिए मुझे लगता है कि इनपुट/आउटपुट फाइलें इसके सापेक्ष हो सकती हैं?)

मुझे यकीन नहीं है कि यह वास्तव में आंतरिक रूप से क्या कर रहा है, लेकिन निष्पादन योग्य को पथ प्रदान करना निर्माता ने समस्या तय की।

यह पोस्ट talks about the problem and this solution है, लेकिन यह भी उठाता है कि पर्यावरण चर सेट करना है या नहीं, जिसमें से "पथ"-जैसी चर ProcessBuilder को निष्पादन योग्य खोजने में मदद के लिए उपयोगी हो सकती है।

2

हाय ट्यूटोरियल का उपयोग करने का प्रयास करें - http://www.javabeat.net/examples/2007/08/21/using-the-new-process-builder-class/। इसका उपयोग करके मैंने आपकी कक्षा को थोड़ा बदल दिया है और यह फ़ाइल पाता है (ध्यान दें कि मुझे नहीं पता कि अंदर क्या है, इसलिए पूरी तरह से इसका परीक्षण नहीं कर सकता)। यह बिना किसी समस्या के संकलित करता है और चलाता है, जबकि आपके अपने आप को एक ही समस्या का अनुभव होता है:

public class Pull { 


public void pullData() throws IOException { 
    /*ProcessBuilder pb = new ProcessBuilder("adb.bat"); 
    File f = new File("C:\\"); 
    pb.directory(f); 
    Process p = pb.start(); 
    */ 
    ProcessBuilder p = new ProcessBuilder("C:\\adb.bat"); 
    p.start(); 
    System.out.println(p.toString()); 
} 


public static void main(String[] args) throws IOException { 


    Pull pull = new Pull(); 
    pull.pullData(); 

} 


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