Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ProcessBuilder_Java_Process_Processbuilder - Fatal编程技术网

Java ProcessBuilder

Java ProcessBuilder,java,process,processbuilder,Java,Process,Processbuilder,我在使用ProcessBuilder运行项目中的类时遇到问题。 我的代码: 公共类主{ 公共静态void main(字符串[]args){ 试一试{ 字符串pathToJar=Main.class.getProtectionDomain().getCodeSource() .getLocation().Tori().getPath(); ArrayList params=新的ArrayList(); 参数添加(“javaw”); 参数add(“-classpath”); 参数add(pathTo

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

公共类主{
公共静态void main(字符串[]args){
试一试{
字符串pathToJar=Main.class.getProtectionDomain().getCodeSource()
.getLocation().Tori().getPath();
ArrayList params=新的ArrayList();
参数添加(“javaw”);
参数add(“-classpath”);
参数add(pathToJar);
参数添加(“程序”);
ProcessBuilder pb=新的ProcessBuilder(参数);
Process进程=pb.start();
}捕获(例外e){
e、 printStackTrace();
}
}
}
类程序在同一个项目(同一个bin文件夹)中,如果直接运行,则工作正常,但这样我会得到错误“找不到主类:程序”。我的代码中的错误在哪里

提前谢谢

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

我的代码中的错误在哪里

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

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



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

响应您的编辑:


您可以通过切换
params.add(pathToJar)来添加当前路径params.add(System.getProperty(“java.class.path”).concat(;”).concat(pathToJar))的代码‌​;
程序
在什么包中?在
参数添加(“程序”)您需要提供完全限定的类名。所有类都没有包。无论如何,把这两个都放在包build.test上,这样就改变了
params.add(“build.test.Program”)。还是相同的错误您是否尝试过输出
pathToJar
的值?这是您所期望的吗?编辑您的帖子并包括完整stacktraceTry
params.add(System.getProperty(“java.class.path”).concat(;”).concat(pathToJar))的副本/粘贴
替换
params.add(pathToJar)
。打印jarpath,很好。同样用软件包测试,同样的错误。我可能在入口点上错了。如果上面没有任何帮助,请向我们显示
程序
类及其
main
方法的签名。
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();
        }
    }
}