Java ProcessBuilder
我在使用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
公共类主{
公共静态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
的值?这是您所期望的吗?编辑您的帖子并包括完整stacktraceTryparams.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();
}
}
}