首页 > 解决方案 > execCMD("cd ~/Desktop/Tmp/Server/ && java -javaagent:lib/Agent.jar -cp ./大创/大创.jar:testcase test.Bank");

问题描述

package test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test{

    public static void execCMD(String cmd){
        StringBuilder result = new StringBuilder();
        try {
            Process p = Runtime.getRuntime().exec(cmd);
            BufferedReader bf = new BufferedReader(new
                    InputStreamReader(p.getInputStream()));
            String line = null;
            while((line=  bf.readLine())!=null) {
                result.append(line+"\n");
            }
        }catch(Exception e) {
            result.delete(0,result.length()-1).append("无效命令");
        };
        System.out.println(result.toString());
    }

    public static void main(String[] args) throws IOException {
        execCMD("cd ~/Desktop/Tmp/Server/ && java -javaagent:lib/Agent.jar -cp ./Dachuang/dachuang.jar:testcase test.Bank");
    }
}

为什么我在控制台上得到空结果?我的意思是也许我不能在一些复杂的命令上执行这个方法。我可以执行(“java --version”)等一些简单的命令。我不知道如何将参数传递给这个方法,我的命令是[ cd ~/Desktop/Tmp/Server/ ] 和[ java -javaagent:lib/Agent.jar -cp ./Dachuang/dachuang.jar:testcase test .银行]。

这是我的屏幕截图: 没有输出

标签: javaexec

解决方案


Java 不是外壳。您可以使用ProcessBuilder. 而不是cd使用directory(File). 而System.getProperty("user.home")不是~. 就像是

public static void main(String[] args) throws IOException, InterruptedException {
    File f = new File(System.getProperty("user.home"), "Desktop/Tmp/Server/");
    ProcessBuilder pb = new ProcessBuilder().directory(f);
    pb.inheritIO();
    pb.command("java", "-javaagent:lib/Agent.jar",
            "-cp", "./Dachuang/dachuang.jar:testcase", "test.Bank");
    Process p = pb.start();
    p.waitFor();
}

推荐阅读