用户输入运行外部应用程序

时间:2014-02-10 16:19:10

标签: java external-process running-other-programs

所以我正在创建一个Java程序,我想这样做,以便你可以让它打开一个程序。 但是,这是捕获,我希望它打开的程序取自用户输入,现在我正试图改变这个

try{Process p = Runtime.getRuntime().exec("notepad.exe");}
catch(Exception e1){}

打开一个程序,打开你要求它打开的程序。

以下是我想要的一个例子:

用户:你能打开Chrome吗?    节目:当然,你走吧!     chrome打开

有谁能告诉我怎么能这样做?

3 个答案:

答案 0 :(得分:2)

您可以通过两种方式实现:

1.使用运行时: Runtime.getRuntime()。exec(...)

因此,例如,在Windows上,

Runtime.getRuntime().exec("C:\application.exe -arg1 -arg2");

2.使用ProcessBuilder:

ProcessBuilder b = new ProcessBuilder("C:\application.exe", "-arg1", "-arg2");

或者

List<String> params = java.util.Arrays.asList("C:\application.exe", "-arg1", "-arg2");
ProcessBuilder b = new ProcessBuilder(params);

ProcessBuilder b = new ProcessBuilder("C:\application.exe -arg1 -arg2");

两者之间的区别是:

调用Runtime.getRuntime()。EXEC(...) 获取单个字符串并将其直接传递给shell或cmd.exe进程。另一方面,ProcessBuilder构造函数采用varargs字符串数组或字符串List,其中数组或列表中的每个字符串都被假定为单个参数。

因此,Runtime.getRuntime.exec()会将C:\ application.exe -arg1 -arg2行传递给cmd.exe,后者运行带有两个给定参数的application.exe程序。但是,ProcessBuilder方法将失败,除非在C:中发生了名为application.exe -arg1 -arg2的程序。

答案 1 :(得分:1)

您可以尝试使用。传递安装chrome的整个路径。

try{
        Process p = Runtime.getRuntime().exec("C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe");
        }
    catch(Exception e1){

    }

答案 2 :(得分:1)

使用exec时,它与在Windows上使用命令行的方式基本相同。打开命令提示符,键入open,然后查看它是否提供了打开文件的详细信息。如果没有,找到开场白。通常在处理命令行操作时,打开文件/应用程序需要多个参数。这方面的一个例子是在Mac上打开“TextEdit.app”应用程序。

Process p = Runtime.getRuntime().exec("open -a TextEdit.app");

终端(对于mac)将使用-a标志打开应用程序,这意味着“应用程序”。你可以打开一个文件:

Process p = Runtime.getRuntime().exec("open filename.file_ext -a TextEdit.app");

第二个将告诉计算机找到名为<app_name>.app的应用程序并打开文件filename.file_ext

我知道这不适用于Windows机器,但它只是展示如何使用命令行操作来打开文件和应用程序。虽然它应该与Windows类似。

希望这有帮助