2017-10-16 32 views
7

जावा 9 Process की जानकारी पाने के लिए सुंदर तरीका provied, लेकिन मैं अभी भी CommandLine & प्रक्रिया के arguments प्राप्त करने के लिए पता नहीं कैसे:जावा में कमांडलाइन और प्रक्रिया के तर्कों प्राप्त करने के लिए कैसे 9

Process p = Runtime.getRuntime().exec("notepad.exe E:\\test.txt"); 
ProcessHandle.Info info = p.toHandle().info(); 
String[] arguments = info.arguments().orElse(new String[]{}); 
System.out.println("Arguments : " + arguments.length); 
System.out.println("Command : " + info.command().orElse("")); 
System.out.println("CommandLine : " + info.commandLine().orElse("")); 

परिणाम:

Arguments : 0 
Command : C:\Windows\System32\notepad.exe 
CommandLine : 

लेकिन मैं उम्मीद कर रहा हूँ:

Arguments : 1 
Command : C:\Windows\System32\notepad.exe 
CommandLine : C:\Windows\System32\notepad.exe E:\\test.txt 
+1

बस आगे डिबग करने के लिए, आप अपने ProcessHandler की जगह 'p.toHandle()' 'साथ ProcessHandle.current()' को देखने के लिए, यदि आप उम्मीद क्षेत्रों में कुछ मूल्यों को प्राप्त करने की कोशिश और निष्पादित कर सकता है? यह देखने के लिए अधिकतर ब्याज की बात है कि आपकी वर्तमान प्रक्रिया का प्रक्रिया हैंडलर उचित है या नहीं। – nullpointer

+0

भाग्यशाली नहीं, अभी भी वही है। – Jerry06

उत्तर

1

बजाय Runtime#exec()

Process p = new ProcessBuilder("notepad.exe", "E:\\test.txt").start(); 

या किसी अन्य रास्ते से ProcessBuilder उपयोग करने के लिए एक प्रक्रिया बनाने के लिए प्रयास करें:

Process p = Runtime.getRuntime().exec(new String[] {"notepad.exe", "E:\\test.txt"}); 
+0

यह वही परिणाम है। मैंने Runtime.getRuntime() – Jerry06

+0

में बदलने से पहले इसे आजमाया था जैसा आपने उल्लेख किया था उसी आदेश का प्रयास किया था? या 'प्रक्रिया पी = रनटाइम .getRuntime()। Exec ("notepad.exe", नया स्ट्रिंग [] {"ई: \\ test.txt"}); ' –

+0

हाँ, बस यह और एक ही परिणाम हुआ। यह सोचकर जावा 9 – Jerry06

5

लगता है इस JDK-8176725 में सूचना मिली थी। यहाँ टिप्पणी समस्या का वर्णन करते है:

आदेश पंक्ति तर्क अन्य प्रक्रियाओं और इतने वैकल्पिक हमेशा खाली है के लिए एक विशेषाधिकार रहित एपीआई के माध्यम से उपलब्ध नहीं हैं। एपीआई स्पष्ट है कि मान ओएस विशिष्ट हैं। यदि भविष्य में, तर्क एक विंडो एपीआई द्वारा उपलब्ध हैं, कार्यान्वयन को अद्यतन किया जा सकता है।

बीटीडब्ल्यू, जानकारी संरचना देशी कोड से भरी हुई है; फ़ील्ड के लिए असाइनमेंट जावा कोड में प्रकट नहीं होते हैं।

+0

हां है, ऐसा लगता है कि यह लिनक्स, मैकोज़ पर काम करता है लेकिन विंडो में नहीं। – Jerry06

+0

उस बग के संकल्प के बारे में बहुत निश्चित नहीं है, लेकिन ऐसा लगता है कि यह * भविष्य परियोजना * के रूप में लिया जाएगा। – nullpointer

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