-javaagent:选项被识别为命令

时间:2015-12-18 02:35:47

标签: java processbuilder javaagents

在我写的应用程序中,我需要使用javaagent选项在与当前jar文件相同的文件夹中调用外部jar。当我从jar文件运行代码时,我被告知:"错误:无法找到或加载主类-javaagent:"但是当我从批处理文件中运行它时,它就像例外一样。

我使用ProcessBuilder启动应用程序:

String java = System.getProperty("java.home") + File.separatorChar + "bin" + File.separatorChar +"java.exe";
File transagent = new File(pluginDir + File.separatorChar + "TransAgent.jar");
String doublequote = String.valueOf('"');
List<String> commandlist = new ArrayList<String>();
commandlist.add(java);
commandlist.add(" -javaagent:");
commandlist.add(doublequote);
commandlist.add(transagent.getAbsolutePath());
commandlist.add(doublequote);
for(int i = 0; i < commandlist.size(); i++){
    String part = commandlist.get(i);
    System.out.print(part);
}
System.out.println();
ProcessBuilder pb = new ProcessBuilder();
pb.command(commandlist);
pb.redirectError(Redirect.appendTo(errorfile));
pb.redirectOutput(Redirect.appendTo(logfile));
try {
    pb.start();
} catch (IOException e) {
    e.printStackTrace();
}

但是,当我转到错误文件时,我看到&#34;错误:无法找到或加载主类-javaagent:&#34;

如果该选项无效,通常会抛出此选项,但我已检查短划线工作文件。我将应用程序中打印的内容放在批处理文件中,并且工作正常。为什么呢?

1 个答案:

答案 0 :(得分:0)

您可以尝试以下代码:

    ProcessBuilder pb = new ProcessBuilder("java", "-javaagent:"+transagent.getAbsolutePath(), "YouMainClass");
    pb.redirectError(Redirect.appendTo(errorfile));
    pb.redirectOutput(Redirect.appendTo(logfile));

    try
    {
        pb.start();
    }
    catch(IOException e)
    {
        e.printStackTrace();
    }