Java 参数无法识别

标签 java jvm arguments

我正在尝试启动另一个 Java 进程 我的 jar,我正在使用 ProcessBuilder:

File javaHome = new File(System.getProperty("java.home"), "bin");
List<String> javaList = new ArrayList<String>();

ProcessBuilder processBuilder = new ProcessBuilder();
processBuilder.redirectErrorStream(true);
processBuilder.directory(serverDir);
{
    javaList.add(javaHome + File.separator + "java");
    javaList.add("-XX:MaxPermSize=512m");
    javaList.add("-Xmx2048M");

    // -Djava.library.path="natives-win-x64/"
    javaList.add(
        String.format(                          
            "-Djava.library.path=\"natives-%s-%s/\"", 
            //Get system os, 
            //Get system arch
        )
    );

    {
        String classPath = new String();
        for (File library : scanLibrary(new File(serverDir, "libraries"))) {
            String libPath = library.getPath();
            classPath += libPath + ";";
        }

        classPath += new File(new File(serverDir, "binary"), "MainJar.jar").getPath();
        javaList.add("-classpath \\\"" + classPath + "\\\" ");
    }

    javaList.add("my.other.jar.main.class");
}
processBuilder.command(javaList);
processBuilder.start();

错误:无法创建 Java 虚拟机。 错误:发生致命异常。程序将会退出。 无法识别的选项: -classpath“C:\Absoulte\Path\Library.jar;C:\Absoulte\Path2\Library2.jar;C:\Absoulte\Path3\Library3.jar”

最佳答案

您将 --classpath "..." 作为单个参数传递。我相信您应该将其指定为两个参数:

javaList.add("-classpath");
javaList.add("\\\"" + classPath + "\\\");

(顺便说一句,我不清楚您是否真的需要所有这些反斜杠...您可能会发现只需 javaList.add(classPath) 就足够了,或者也许 javaList.add("\""+ classPath + "\"").)

关于Java 参数无法识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27549912/

相关文章:

java - 无法在具有 8GB RAM 的系统上将 xmx 设置为超过 4GB

函数参数中的c++函数定义

javascript - 在函数调用的参数中分配变量名

java - 如何将日期转换为 yyyy-MM-dd 格式?

java - 使用 Mockito 注入(inject) DozerBeanMapper

java - 如何自动找到包含jvm的目录来启动jar?

java - 符合specjvm2008基准测试

java - 如何让我的 Android 应用程序可以从锁屏访问?

没有 IDE JSONObject 的 JAVA

c++ - 为什么是 'wrong number of template arguments' ?