Có cách nào để chạy dòng lệnh này trong một ứng dụng Java không?Chạy dòng lệnh trong Java
java -jar map.jar time.rel test.txt debug
Tôi có thể chạy bằng lệnh nhưng tôi không thể thực hiện điều đó trong Java.
Có cách nào để chạy dòng lệnh này trong một ứng dụng Java không?Chạy dòng lệnh trong Java
java -jar map.jar time.rel test.txt debug
Tôi có thể chạy bằng lệnh nhưng tôi không thể thực hiện điều đó trong Java.
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
là bình thường khi tôi cố gắng xuất nó ra bàn điều khiển, nó chỉ xuất ra một cái gì đó như thế này: [email protected] – Ataman
Sử dụng 'pr.getInputStream()'. Dưới đây là ví dụ chi tiết: http://www.linglom.com/2007/06/06/how-to-run-command-line-or-execute-external-application-from-java/ – kol
Sẽ hữu ích khi kiểm tra xem quá trình trả về với. Bạn có thể nhận được điều đó với pr.waitFor(). Vì vậy, nó trông như thế này: 'int retVal = pr.waitFor()'. Vì vậy, nếu nó không phải là 0, bạn có thể hủy bỏ/dọn dẹp. – 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");
Các bạn đã thử lệnh exec trong lớp Runtime?
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");
Cân nhắc những điều sau nếu bạn chạy vào bất kỳ vấn đề hơn nữa, nhưng tôi đoán rằng ở trên sẽ làm việc cho bạn:
Bạn có thể cũng xem kết quả như sau:
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();
Và đừng quên, nếu bạn đang chạy trong Windows, bạn cần phải đặt "cmd/c" trước lệnh của bạn.
Để tránh quá trình được gọi bị chặn nếu nó xuất nhiều dữ liệu về đầu ra tiêu chuẩn và/hoặc lỗi, bạn phải sử dụng giải pháp do Craigo cung cấp. Cũng lưu ý rằng ProcessBuilder tốt hơn Runtime.getRuntime(). Exec(). Điều này là cho một vài lý do: nó tokenizes tốt hơn các đối số, và nó cũng sẽ chăm sóc đầu ra tiêu chuẩn lỗi (kiểm tra cũng here).
ProcessBuilder builder = new ProcessBuilder("cmd", "arg1", ...);
builder.redirectErrorStream(true);
final Process process = builder.start();
// Watch the process
watch(process);
Tôi sử dụng chức năng mới "xem" để thu thập dữ liệu này trong một chuỗi mới. Chủ đề này sẽ kết thúc trong quá trình gọi khi quá trình được gọi kết thúc.
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();
}
gì về
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();
}
}
Tôi đã thử, Runtime rt = Runtime.getRuntime(); Process proc = rt.exec ("ping localhost"); – Ataman
Bạn có muốn khởi động máy ảo từ bên trong một máy ảo khác không? – chance