【问题标题】:How Can I execute external program with arguments in Java [duplicate]如何使用 Java 中的参数执行外部程序 [重复]
【发布时间】:2016-11-30 09:30:56
【问题描述】:

单击 javafx 应用程序的按钮(代码中未包含 btn 事件)后,我想使用参数启动外部程序(其中一个参数是将配置文件加载到该外部程序),但我想知道为什么一直给我错误!

我的 IDE 是 InjellJ IDEA 社区版

我知道这个问题是重复的,但是在这个平台上给出的所有示例中,已经尝试过但没有成功,但是我的代码包含配置文件作为参数的一部分

这里是代码

private String appDomain = Paths.get("").toAbsolutePath().normalize().toString();
private String exepath = appDomain+"\\src\\bin\\exeResources\\MyExe.exe";
private String exeargs = appDomain+"\\src\\bin\\exeResources\\MyExe.ppx silent-load";

try {
        Runtime r = Runtime.getRuntime();
        r.exec(exepath +" "+exeargs);
    } catch (IOException e) {

        e.printStackTrace();
    }

当我删除“exeargs”时出现错误 CreateProcess 错误=193,%1 不是有效的 Win32 应用程序

让我很难知道“exeargs”是否可以与上述 sn-p 一起使用。

您的帮助将不胜感激

编辑

我必须加载的 exefile 和 execonfig 位于我的项目 **bin.exeResource** 中的一个包中 通过

打印路径和参数
System.out.println(exepath+" "+exeargs);

给我

C:\Users\{MyUser}\OneDrive\IntelliJ IDEA Projects\MyProject Package\src\bin\exeResources\MyExe.exe ...\src\bin\exeResources\MyExe.ppx silent-load

有错误

CreateProcess error=193, %1 is not a valid Win32 application

【问题讨论】:

  • 你打印出exepath的结果了吗?它包括任何空格吗?您确定可执行文件实际上在该路径中吗?您似乎正在寻找一个相对目录,如果您的当前目录不是src 目录之上的目录,则可能会失败。
  • .exe 文件完好无损,先生!当我尝试打印参数和我得到的错误时,我编辑了问题并添加了输出!注意.exe文件位于包bin\exeResources
  • 啊,所以路径中有空格。 “IntelliJ IDEA 项目” - 包含空格。所以它认为命令是C:\Users\{MyUser}\OneDrive\IntelliJ 并且失败了。我将把它作为副本关闭。

标签: java javafx


【解决方案1】:

有一个专门为您的目的重载的exec 方法。它接受一个参数字符串数组,其中包含命令和命令的参数。这似乎正是您所需要的。请看API

【讨论】:

  • 非常感谢这解决了我的问题!
  • 太好了,我很乐意提供帮助,您为什么不对答案投票并将其标记为解决问题的答案?
  • 我对你投了赞成票,但 stackoverflow 会通知我,如果我的声誉低于 15,则不会向公众显示 Uptvote
  • 好的,谢谢,祝你好运
【解决方案2】:

我认为您对 exe 参数感到困惑。试试这个:

private String appDomain = Paths.get("").toAbsolutePath().normalize().toString();
private String exepath = appDomain + "\\src\\bin\\exeResources\\MyExe.exe";
private String exeargs = "silent-load";

try {
        Runtime r = Runtime.getRuntime();
        r.exec(exepath + " " + exeargs);
    } catch (IOException e) {

        e.printStackTrace();
    }

【讨论】:

  • 请注意,使用此参数,您已省略加载配置文件名称或“exe config”选项再次检查“exeargs”! ...\\MyExe.ppx 静默加载
猜你喜欢
  • 2019-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多