2011-06-22 11 views
6

खत्म करने के लिए अपने जावा प्रोग्राम में प्रतीक्षा कर रहा है, मैं एक प्रक्रिया है कि एक कमांड निष्पादित करता है इस तरह की एक बैच फ़ाइल को चलाने के लिए बनाने के लिए:जावा से एक कमांड को क्रियान्वित और कमान

try { 
     File tempFile = new File("C:/Users/Public/temp.cmd"); 
     tempFile.createNewFile(); 
     tempFile.deleteOnExit(); 


     setContents(tempFile, recipe.getText()); //Writes some user input to file 
     String cmd = "cmd /c start " + tempFile.getPath(); 


     Process p = Runtime.getRuntime().exec(cmd); 


     int exitVal = p.waitFor(); 

     refreshActionPerformed(evt); 

    } catch (InterruptedException ex) { 
     Logger.getLogger(mainFrame.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (IOException ex) { 
     Logger.getLogger(mainFrame.class.getName()).log(Level.SEVERE, null, ex); 
    } 

अब, मैं करना चाहते हैं ऐसा हुआ है कि

refreshActionPerformed(evt); 

केवल बैच फ़ाइल के बाद ही चलाया जाता है जिसे मैंने निष्पादित कर दिया है। लेकिन अभी, कमांड प्रॉम्प्ट खुलने के तुरंत बाद यह चलता है।

मैं इसे कैसे ठीक करूं?

+0

पढ़ सकते हैं और लागू * सभी * की सलाह [जब Runtime.exec() नहीं होगा] (http://www.javaworld.com/javaworld/jw-12-2000/jw- के लिए सुनिश्चित करें 1229-traps.html)। अन्यथा आप निश्चित रूप से "नहीं करेंगे" का अनुभव करेंगे। 1.5+ के लिए 'प्रोसेसबिल्डर' का उपयोग करने और तर्कों को सरणी के रूप में पास करने पर भी विचार करें। –

+0

मैंने पढ़ा जब Runtime.exec() नहीं होगा, लेकिन स्पष्ट रूप से, मैं जावा प्रोग्रामिंग के लिए बिल्कुल नया हूं और मुझे नहीं पता कि उस लेख की सलाह को कैसे कार्यान्वित किया जाए। –

उत्तर

12

मैं कहीं और जवाब खोजने के लिए उलझ गया। आरंभिक प्रक्रिया को तब तक खोलने के लिए जब तक बैच फ़ाइल समाप्त न हो, आपको "/ प्रतीक्षा"

Process p = Runtime.getRuntime().exec("cmd /C start /wait filepath.bat"); 
int exitVal = p.waitFor(); 
+2

मेरे लिए '/ प्रतीक्षा करें' और 'p.waitFor()' काम किया। –

2

"cmd/c start" कॉल करने से cmd का कारण किसी अन्य इंस्टेंस को बंद कर देता है और तत्काल बाहर निकलता है। "प्रारंभ" कमांड को निकालने का प्रयास करें।

+0

जब मैं ऐसा करता हूं, तो मेरा प्रोग्राम फ्रीज हो जाता है। मेरा अनुमान है कि p.waitfor() अब वापस नहीं आ रहा है। मुझे क्या करना चाहिए? –

+0

शायद आपकी .bat फ़ाइल के अंत में "बाहर निकलें" डालें? –

+0

ऐसा लगता है कि काम करता है। लेकिन मेरी समस्या यह है कि .bat फ़ाइल की सामग्री उपयोगकर्ता परिभाषित हैं। इसलिए यदि वे अंत में एक EXIT नहीं डालते हैं, तो वे थोड़े खराब हो जाते हैं। कोई सलाह? –

0

दिया गया उत्तर सही है। मैंने कहा कि कोड द्वारा खोली गई विंडो को मैन्युअल रूप से बंद करने की आवश्यकता है।

Process p = Runtime.getRuntime().exec("cmd /C start /wait filepath.bat"); 
int exitVal = p.waitFor(); 
संबंधित मुद्दे