java调用批处理文件执行,为何无效?

时间:2022-09-29 11:38:39
代码如下:


public static void main(String[] args)
{
String command = "cmd /c C:\\test.bat";

try
{
Runtime.getRuntime().exec(command);
}
catch (Exception e) 
{
e.printStackTrace();
}
}

发现根本没效果,但也没报错,我直接点test.bat可以看到效果,请教各位,这样写,是不是漏了什么呢?

11 个解决方案

#1


Runtime.getRuntime().exec("cmd /c start C:\\test.bat");

在独立窗口显示结果好像需要加 start

#2


Runtime.getRuntime().exec("C:\\test.bat");
直接这样可以不?

#3


"cmd /c start \"C:\\test.bat\""

 路径好像要加上双引号。这样试试。

#4


你按照我的步骤走一遍:

1.
G盘下建一个文件
文件名HelloWorld.bat
文件内容:

import javax.swing.*;
public class HelloWorld {//无论如何要记住这个类名,因为它是程序的入口
    public static void main(String[] args) {
JFrame jFrame = new JFrame();
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setBounds(200, 200, 30, 50);
jFrame.add(new JLabel("HelloWorld"));//显示
jFrame.setVisible(true);
 }
}


2.
G盘下建一个文件
文件名HelloWorld.bat
文件内容:

javac -d g:/ HelloWorld.java
java  -classpath  g:/ HelloWorld


3.
建立一个.java文件,mian方法是:

public static void main(String args[]) throws Exception {
Process process = Runtime.getRuntime().exec("g:/HelloWorld.bat"); 
process.waitFor(); 
}


执行就可以弹出HelloWorld窗口

#5


对比一下 很显然,
1.你的应该是批处理文件有问题
应该用对路径,比如我的    -d g:/     -classpath g:/  
就是 批处理中要执行的另一程序路径定死

2.main方法中 process.waitFor(); 



#6


说的不够清楚:

批处理中的内容中  
你不应该用相对路径,因为批处理认识那个程序相对路径 可是java虚拟机却不认识了

#7


该回复于2011-10-08 16:11:10被版主删除

#8


你的代码没有等待bat执行结束。
这样改:

 public static void main(String[] args)
    {
        String command = "cmd /c d:\\test.bat";

        try
        {
         Process process = Runtime.getRuntime().exec(command);
         process.waitFor();

        }
        catch (Exception e) 
        {
            e.printStackTrace();
        }
    }

#9


引用 6 楼 k3108001263 的回复:
说的不够清楚:

批处理中的内容中  
你不应该用相对路径,因为批处理认识那个程序相对路径 可是java虚拟机却不认识了

是的,应该是这个原因的了。现在正在想怎么改。
我的批处理,有点复杂,是要启动mysql服务的,不好改,还得研究下再说了。

#10



public static void main(String[] args) {

String command = "cmd /c start C:\\test.bat";

        try
        {
            Runtime.getRuntime().exec(command);
        }
        catch (Exception e) 
        {
            e.printStackTrace();
        }
}

#11


引用 5 楼 k3108001263 的回复:
对比一下 很显然,
1.你的应该是批处理文件有问题
应该用对路径,比如我的 -d g:/ -classpath g:/ 
就是批处理中要执行的另一程序路径定死

2.main方法中 process.waitFor();

忘了结贴了,解决了,确实是路径问题,谢谢

#1


Runtime.getRuntime().exec("cmd /c start C:\\test.bat");

在独立窗口显示结果好像需要加 start

#2


Runtime.getRuntime().exec("C:\\test.bat");
直接这样可以不?

#3


"cmd /c start \"C:\\test.bat\""

 路径好像要加上双引号。这样试试。

#4


你按照我的步骤走一遍:

1.
G盘下建一个文件
文件名HelloWorld.bat
文件内容:

import javax.swing.*;
public class HelloWorld {//无论如何要记住这个类名,因为它是程序的入口
    public static void main(String[] args) {
JFrame jFrame = new JFrame();
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setBounds(200, 200, 30, 50);
jFrame.add(new JLabel("HelloWorld"));//显示
jFrame.setVisible(true);
 }
}


2.
G盘下建一个文件
文件名HelloWorld.bat
文件内容:

javac -d g:/ HelloWorld.java
java  -classpath  g:/ HelloWorld


3.
建立一个.java文件,mian方法是:

public static void main(String args[]) throws Exception {
Process process = Runtime.getRuntime().exec("g:/HelloWorld.bat"); 
process.waitFor(); 
}


执行就可以弹出HelloWorld窗口

#5


对比一下 很显然,
1.你的应该是批处理文件有问题
应该用对路径,比如我的    -d g:/     -classpath g:/  
就是 批处理中要执行的另一程序路径定死

2.main方法中 process.waitFor(); 



#6


说的不够清楚:

批处理中的内容中  
你不应该用相对路径,因为批处理认识那个程序相对路径 可是java虚拟机却不认识了

#7


该回复于2011-10-08 16:11:10被版主删除

#8


你的代码没有等待bat执行结束。
这样改:

 public static void main(String[] args)
    {
        String command = "cmd /c d:\\test.bat";

        try
        {
         Process process = Runtime.getRuntime().exec(command);
         process.waitFor();

        }
        catch (Exception e) 
        {
            e.printStackTrace();
        }
    }

#9


引用 6 楼 k3108001263 的回复:
说的不够清楚:

批处理中的内容中  
你不应该用相对路径,因为批处理认识那个程序相对路径 可是java虚拟机却不认识了

是的,应该是这个原因的了。现在正在想怎么改。
我的批处理,有点复杂,是要启动mysql服务的,不好改,还得研究下再说了。

#10



public static void main(String[] args) {

String command = "cmd /c start C:\\test.bat";

        try
        {
            Runtime.getRuntime().exec(command);
        }
        catch (Exception e) 
        {
            e.printStackTrace();
        }
}

#11


引用 5 楼 k3108001263 的回复:
对比一下 很显然,
1.你的应该是批处理文件有问题
应该用对路径,比如我的 -d g:/ -classpath g:/ 
就是批处理中要执行的另一程序路径定死

2.main方法中 process.waitFor();

忘了结贴了,解决了,确实是路径问题,谢谢