关于用exec()启动一个可执行文件,偶知道怎么用.现在想用它启动一个JAVA程序,参考了网上一些写法,都没有成效,诸如这种写法:Runtime.getRuntime().exec("java -classpath d:\\jexam StoreProc")只启动了java程序,但没运行我的程序.d:\\jexam 已经在环境变量里设置过了,这样写Runtime.getRuntime().exec("java StoreProc"),也不行!
已经折腾了两天了,哪位大虾实现过,麻烦给出详细一点的说明,谢谢啦!
已经折腾了两天了,哪位大虾实现过,麻烦给出详细一点的说明,谢谢啦!
bat文件:
java StoreProc
@edho off
cls
没效果,哪儿不对?
new A(new B().start());以前只用过,利用exec()开启一个..\\路径\\*.exe的进程,执行java类,没搞过
如果你要在独立的线程中启动该进程,可以使用如下代码:
new Thread()
{
public void run()
{
try
{
Runtime.getRuntime().exec("java -classpath d:\\jexam StoreProc");
}
catch ( IOException e )
{
e.printStackTrace();
}
}
}.start();
System.out.println("Start Processing");
try{
System.out.println("Programme is Running ...");
Process prs = Runtime.getRuntime().exec("d:\\my.bat");
System.out.println("exec...");
System.out.print(loadStream(prs.getInputStream()));
System.err.print(loadStream(prs.getErrorStream()));
}catch(IOException e){
e.printStackTrace();
}
System.out.println("Programme Stop");
}
所执行的StoreProc是一个调用存储过程的程序,单独调试是能成功运行的.调试上面的程序时,输出到:Programme is Running ...控制台就不再显示其他信息了,说明没有启动StoreProc.
java -classpath d:\\jexam StoreProc这种写发试了,没用,调试结果同上
--------------------------------------------------------
try{
System.out.println("Programme is Running ...");
Process prs = Runtime.getRuntime().exec("d:\\my.bat");
System.out.println("exec...");
InputStream stderr = prs.getErrorStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line = null;
System.out.println("<ERROR>");
while ( (line = br.readLine()) != null)
System.out.println(line);
System.out.println("</ERROR>");
try{
int val=prs.waitFor();
System.out.println("val:"+val);
}catch(InterruptedException ee){
ee.printStackTrace();
}
}catch(IOException e){
e.printStackTrace();
}
System.out.println("Programme Stop");
-------------------------------------------------------------------
运行结果:
-------------------------------------------------------------------
Start Processing
Programme is Running ...
exec...
<ERROR>
java.lang.NoClassDefFoundError: StoreProc (wrong name: myPackage/StoreProc)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Exception in thread "main" 'edho' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
</ERROR>
val:0
Programme Stop
----------------------------------------
出现的错误主要是跟exec内的错误有关,在DOS环境下,不是在本地执行类文件,就会出现上面的错误,里面的参数到底怎么指定呢?
cmd[0]="cmd";
cmd[1]="/c";
cmd[2]="yourbat.bat";
Process proc=Runtime.getRuntime().exec(cmd);
一般就应该可以了我有个问题:
我想要在bat里调用wmic process list>list.txt
结果就卡住了
用进程管理器看 wmic的进程已经被调起来 可是却没有继续往下运行 停在那儿了
list.txt文件已经生成却 却一直都是0字节
直到我用ctrl-c停掉我的java程序 list.txt文件内才出现内容