使用Runtime.getRuntime()。exec()执行Java文件

发布于 2021-01-29 19:57:48

此代码将执行一个外部exe应用程序。

private void clientDataActionPerformed(java.awt.event.ActionEvent evt) {                                           
    // TODO add your handling code here:      
    try {            
        Runtime.getRuntime().exec("C:\\Program Files (x86)\\VideoLAN\\VLC\\vlc.exe");
    } catch(Exception e) {
        System.out.println(e.getMessage());
    }     
}

如果我想执行外部Java文件怎么办?可能吗?例如以下命令:

Runtime.getRuntime().exec("cmd.exe /C start cd \"C:\Users\sg552\Desktop\ java testfile");

该代码在java和cmd提示符下不起作用。如何解决呢?

关注者
0
被浏览
108
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    首先,您的命令行看起来不正确。执行命令与批处理文件不同,它不会执行一系列命令,而只会执行一个命令。

    从外观上看,您正在尝试更改要执行的命令的工作目录。一个更简单的解决方案是使用ProcessBuilder,它将允许您指定给定命令的起始目录…

    例如…

    try {
        ProcessBuilder pb = new ProcessBuilder("java.exe", "testfile");
        pb.directory(new File("C:\Users\sg552\Desktop"));
        pb.redirectError();
        Process p = pb.start();
        InputStreamConsumer consumer = new InputStreamConsumer(p.getInputStream());
        consumer.start();
        p.waitFor();
        consumer.join();
    } catch (IOException | InterruptedException ex) {
        ex.printStackTrace();
    }
    
    //...
    
    public class InputStreamConsumer extends Thread {
    
        private InputStream is;
        private IOException exp;
    
        public InputStreamConsumer(InputStream is) {
            this.is = is;
        }
    
        @Override
        public void run() {
            int in = -1;
            try {
                while ((in = is.read()) != -1) {
                    System.out.println((char)in);
                }
            } catch (IOException ex) {
                ex.printStackTrace();
                exp = ex;
            }
        }
    
        public IOException getException() {
            return exp;
        }
    }
    

    ProcessBuilder 还可以更轻松地处理可能在其中包含空格的命令,而不必将引号引起来。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看