当前位置: 首页 > 面试题库 >

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

易宏阔
2023-03-14
问题内容

代码将执行一个外部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提示符下不起作用。如何解决呢?


问题答案:

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

从外观上看,您正在尝试更改要执行的命令的工作目录。一个更简单的解决方案是使用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 还可以更轻松地处理可能在其中包含空格的命令,而不必将引号引起来。



 类似资料:
  • 问题内容: 在我正在处理的项目中,我需要执行资源文件夹(位于类路径中)中的脚本。我只是在测试最终的脚本功能,因为我在Windows上,所以我需要一种将文件输出到STDIN的方法,因此我创建了一个简单的cat.jar程序来克隆unixs cat命令。 因此,当我执行“ java -jar cat.jar someFile.txt”时,它将输出文件到stdout。我敢肯定,我做的事情有不同的方式。 无

  • 问题内容: 我只想从特定文件夹执行文件。就我而言/ data / data / my-package / files /。所以我试着: 没用 谁能告诉我正确的做法。谢谢 问题答案: 应该可以使用以下命令在特定的工作目录下调用可执行文件: 如下: 也许没有完整的途径 而不是硬编码,该路径也应该起作用,并且比您自己指定路径更安全/更干净,因为不能保证该 路径始终是所有设备的正确路径。 问题在于目录已针

  • 问题内容: 仅当数据库名称包含(新数据库(myid)等)时,我才能读取文件。我给出以下示例代码: 假设我的数据库名称de mo是指我在打印行时得到的数据库名称仅是de。数据库名称带有空白时可以吗? 问题答案: 您熟悉双引号错误吗?(用于或) 你可以试试: 只需确保您不必传递的任何参数都包含双引号( 而不 是以双引号开头) (请参见 错误6511002 ) 任何类似的参数: 将在 内部 (通过实现)

  • myStr是上面我要执行的整个命令吗? 我已经尝试过的事情: 给了我一个错误: 它运行起来像一个魅力,但不是通过runtime.exec()。

  • 问题内容: 我有一条命令需要在Java中按照以下方式运行: 当路径没有空格时,此命令可以正常工作,但是当我有空格时,似乎无法正常工作。我尝试了以下事情,运行Java 1.7 以及 但是似乎两者都没有做任何事情。关于我在做什么错的任何想法吗? 问题答案: 传递给命令的每个参数都应该是一个单独的String元素。 所以你的命令数组应该看起来更像是… 现在,每个元素将在程序变量中显示为单独的元素 我也极

  • 我有一些Java(swing)代码调用。如果我从命令行运行它,程序运行得非常好。