如何将批处理文件包含到Eclipse Java应用程序中?
我有一个Java应用程序,当我通过命令行运行它时,它工作得很好(我用记事本++编写了它)。然而,当我尝试将同一个Java应用程序移植到Eclipse中时,它对我不起作用。这是一个以批处理文件为特征的应用程序,该批处理文件用于重新启动中途中断的程序: 批处理文件:如何将批处理文件包含到Eclipse Java应用程序中?,java,eclipse,batch-file,Java,Eclipse,Batch File,我有一个Java应用程序,当我通过命令行运行它时,它工作得很好(我用记事本++编写了它)。然而,当我尝试将同一个Java应用程序移植到Eclipse中时,它对我不起作用。这是一个以批处理文件为特征的应用程序,该批处理文件用于重新启动中途中断的程序: 批处理文件: set CLASSPATH=./bin java fixedMessageApp.FixedMessageSequenceServer 4446 mylogfile.txt 0 0 ping 127.0.0.1 -n 2 >
set CLASSPATH=./bin
java fixedMessageApp.FixedMessageSequenceServer 4446 mylogfile.txt 0 0
ping 127.0.0.1 -n 2 > nul
rem java fixedMessageApp.FixedMessageSequenceClient localhost 4444 myclientLog.txt 0
Java文件:
public class FixedMessageRunner {
public static void main(String[] args) {
if (args.length < 1) {
System.out.println("usage: java FixedMessageRunner CMD" );
System.exit(0);
}
try {
//for (;;) {
String current = new java.io.File( "." ).getCanonicalPath();
System.out.println("Current dir:"+current);
ProcessBuilder pb = new ProcessBuilder(args[0]);
pb.directory(new File(current)); //("C://FixedMessageApplication//"));
Process p = pb.start();
p.waitFor();
//}
} catch (IOException i) {
i.printStackTrace();
}
catch (InterruptedException i) {
i.printStackTrace();
}
}
}
公共类FixedMessageRunner{
公共静态void main(字符串[]args){
如果(args.length<1){
println(“用法:JavaFixedMessageRunnerCmd”);
系统出口(0);
}
试一试{
//对于(;){
字符串current=new java.io.File(“.”).getCanonicalPath();
System.out.println(“当前目录:+当前”);
ProcessBuilder pb=新的ProcessBuilder(参数[0]);
pb.directory(新文件(当前));/(“C://FixedMessageApplication/”);
进程p=pb.start();
p、 waitFor();
//}
}捕获(IOI异常){
i、 printStackTrace();
}
捕获(中断异常i){
i、 printStackTrace();
}
}
}
为什么这在Eclipse中不起作用,就像在CMD中一样?在Eclipse中,当运行时,它将挂起:
当前目录值是否与预期值相同?您是否尝试过进行“调试”?可能是因为您正在调用p.waitFor();这可能会导致线程等待进程完成。我还会添加,尝试添加system.out.println(“Hello”);在p.waitfor()之后;并在命令行中运行。我的猜测是,命令行与eclipse有相同的问题,只是您没有发布它。您可以捕获进程的输出流并查看它。在某些情况下,将windows批处理文件作为可执行文件调用不起作用。“current dir”值是否如预期的那样?您是否尝试过进行“调试”?可能是因为您正在调用p.waitFor();这可能会导致线程等待进程完成。我还会添加,尝试添加system.out.println(“Hello”);在p.waitfor()之后;并在命令行中运行。我的猜测是,命令行与eclipse有相同的问题,只是您没有发布它。您可以捕获进程的输出流并查看它。在某些情况下,将windows批处理文件作为可执行文件调用不起作用。