1

我在使用 ProcessBuilder 在我的项目中运行一个类时遇到问题。我的代码:

public class Main {
    public static void main(String[] args) {
        try {
            String pathToJar = Main.class.getProtectionDomain().getCodeSource()
                    .getLocation().toURI().getPath();
            ArrayList<String> params = new ArrayList<String>();    
            params.add("javaw");
            params.add("-classpath");
            params.add(pathToJar);
            params.add("Program");
            ProcessBuilder pb = new ProcessBuilder(params);
            Process process = pb.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

类程序在同一个项目(同一个 bin 文件夹)中,如果直接运行,可以正常工作,但这样我得到错误“找不到主类:程序”。我的代码中的错误在哪里?

提前致谢。

[编辑] 我得出的结论是我的 Program 类上的一些代码给出了错误。基本上只运行“干净”的主要。在 Eclipse 中,Program 类正在导入 jar 文件中的一些库。我不需要在 ProcessBuilder 中引用它吗?如果是这样,怎么做?

4

2 回答 2

2

回应您的编辑:

params.add(pathToJar);您可以通过切换来添加当前路径params.add(System.getProperty("java.class.path").concat(";").concat(pathToJar))‌​;

于 2012-05-13T03:16:01.420 回答
1

我的代码中的错误在哪里?

(您正在启动javaw可执行文件,所以这不是问题。也不是您的入口点方法的签名不正确,因为这会给出不同的诊断。)

问题是类名不正确(例如,如果应该是“come.pkg.Program”),或者 JAR 文件的路径名不正确。


假设您已经消除了类名不正确的可能性,我的猜测是您正在尝试对 JAR 文件使用相对路径名,但是对于当前目录是什么存在一些混淆;即需要解析路径名的目录。尝试在类路径参数中使用绝对路径名。

于 2012-05-13T02:26:24.480 回答