代码1package bat.test2;public class TestClass { public void PrintTest(String[] args) { System.out.println("参数1: " + args[0]);
System.out.println("参数2: " + args[1]);
}
}
代码2package bat.test2;public class BatTest2 { public static void main(String[] args) {
TestClass test = new TestClass();
test.PrintTest(args);
}
}
以上两段代码编译后打包成jar文件,并且制定了Main方法。bat文件(batch.bat)
@echo 开始批处理程序
@echo off
set CLASSPATH=.;battest2.jar;
java -classpath "%CLASSPATH%" bat.test2.BatTest2 %1 %2代码3public class BatTest { public static void main(String[] args) { String cmd = "cmd /c start";
String batPath = "D:\\code\\battest.bat"; try {
Runtime.getRuntime().exec(
cmd + " " + batPath + " " + args[0] + " " + args[1]);
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行代码3之后能够在cmd窗口中看到“开始批处理程序”,说明bat文件调用成功。但是系统抛出java.lang.NoClassDefFoundError异常。另外,单独在控制台下执行bat文件(batch.bat 1 0)是可以输出结果的。不晓得在路径上出了什么错,还望各位能指点一下。

解决方案 »

  1.   

    估计是找不到jar包,
    这句set CLASSPATH=.;battest2.jar;
    吧battest2.jar换成绝对路径试一下可能是在BatTest中调用,把这个相对路径替换成BatTest的路径了
      

  2.   

    非常感谢你的建议,程序可以正常执行了.但是这个是什么道理呢.单独运行bat就可以,用程序调用就找不到路径,能够使用相对路径吗?
      

  3.   

    please try it out.....
    set CLASSPATH=.;.\battest2.jar;
      

  4.   

    就是相对路径替换的问题,以下是我的猜测:比如BatTest在D:\java下,通过BatTest运行bat文件,就是在D:\java路径下开启个命令行,把bat文件中的内容运行一下,所以bat中的相对路径就替换成D:\java了lz可以试一下把battest2.jar放到BatTest所在的路径下,如果能运行的话,上面的推测就是对的。