जावा एप्लिकेशन के भीतर इस कमांड लाइन को चलाने का कोई तरीका है?जावा में रनिंग कमांड लाइन
java -jar map.jar time.rel test.txt debug
मैं इसे कमांड के साथ चला सकता हूं लेकिन मैं जावा के भीतर ऐसा नहीं कर सका।
जावा एप्लिकेशन के भीतर इस कमांड लाइन को चलाने का कोई तरीका है?जावा में रनिंग कमांड लाइन
java -jar map.jar time.rel test.txt debug
मैं इसे कमांड के साथ चला सकता हूं लेकिन मैं जावा के भीतर ऐसा नहीं कर सका।
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec("java -jar map.jar time.rel test.txt debug");
http://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html
यह सामान्य है कि जब मैं इसे कंसोल करने के लिए आउटपुट करने का प्रयास करता हूं तो यह केवल कुछ ऐसा आउटपुट करता है: [email protected] – Ataman
'pr.getInputStream()' का उपयोग करें। यहां एक विस्तृत उदाहरण दिया गया है: http://www.linglom.com/2007/06/06/how-to-run-command-line-or-execute-external-application-from-java/ – kol
यह जांचना उपयोगी है कि क्या प्रक्रिया के साथ आता है। आप pr.waitFor() के साथ प्राप्त कर सकते हैं। तो ऐसा लगता है: 'int retval = pr.waitFor() '। तो यदि यह 0 नहीं है, तो आप निरस्त/साफ कर सकते हैं। – Shiki
Process p = Runtime.getRuntime().exec("java -jar map.jar time.rel test.txt debug");
Runtime.getRuntime().exec("java -jar map.jar time.rel test.txt debug");
आप रनटाइम वर्ग के भीतर कार्यकारी आदेश की कोशिश की है? अगर आप किसी भी आगे की समस्याओं में चलाने
Runtime.getRuntime().exec("java -jar map.jar time.rel test.txt debug")
import java.io.*;
Process p = Runtime.getRuntime().exec("java -jar map.jar time.rel test.txt debug");
निम्नलिखित पर विचार करें, लेकिन मेरा अनुमान है कि यह है कि इसके बाद के संस्करण आप के लिए काम करेंगे:
आप कर सकते हैं इस तरह के आउटपुट को भी देखें:
final Process p = Runtime.getRuntime().exec("java -jar map.jar time.rel test.txt debug");
new Thread(new Runnable() {
public void run() {
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
try {
while ((line = input.readLine()) != null)
System.out.println(line);
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
p.waitFor();
और अगर आप विंडोज़ में चल रहे हैं, तो मत भूलना, आपको अपने कमांड के सामने "cmd/c" डालना होगा।
आप यह समझने के लिए p.getErrorStream का भी उपयोग कर सकते हैं कि आपका आदेश क्यों टूटा हुआ है! – jakebeal
@Craigo: आपके "cmd/c" कथन से संबंधित कोई संदर्भ? thx – Campa
दरअसल, मुझे लगता है कि आपको "cmd/c" की आवश्यकता है, अगर आप विंडोज़ कमांड चलाने की इच्छा रखते हैं, जैसे "प्रतिलिपि"। भ्रम के लिए माफ़ी। – Craigo
अवरुद्ध होने वाली प्रक्रिया से बचने के लिए यदि यह मानक आउटपुट और/या त्रुटि पर बहुत अधिक डेटा आउटपुट करता है, तो आपको क्रेगो द्वारा प्रदान किए गए समाधान का उपयोग करना होगा। ध्यान दें कि ProcessBuilder Runtime.getRuntime()। Exec() से बेहतर है। यह कुछ कारणों से है: यह तर्कों को बेहतर बनाता है, और यह त्रुटि मानक आउटपुट का भी ख्याल रखता है (here भी देखें)।
ProcessBuilder builder = new ProcessBuilder("cmd", "arg1", ...);
builder.redirectErrorStream(true);
final Process process = builder.start();
// Watch the process
watch(process);
मैं इस डेटा को नए धागे में इकट्ठा करने के लिए एक नया फ़ंक्शन "घड़ी" का उपयोग करता हूं। कॉल किया गया प्रक्रिया समाप्त होने पर यह थ्रेड कॉलिंग प्रक्रिया में समाप्त हो जाएगा।
private static void watch(final Process process) {
new Thread() {
public void run() {
BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = null;
try {
while ((line = input.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
क्या
के बारे मेंpublic class CmdExec {
public static Scanner s = null;
public static void main(String[] args) throws InterruptedException, IOException {
s = new Scanner(System.in);
System.out.print("$ ");
String cmd = s.nextLine();
final Process p = Runtime.getRuntime().exec(cmd);
new Thread(new Runnable() {
public void run() {
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
try {
while ((line = input.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
p.waitFor();
}
}
मैं कोशिश की है, क्रम आरटी = Runtime.getRuntime(); प्रक्रिया PROC = rt.exec ("पिंग स्थानीय होस्ट"); – Ataman
क्या आप एक और वीएम के भीतर से वीएम लॉन्च करना चाहते हैं? – chance