【问题标题】:Call exe file from java code从java代码调用exe文件
【发布时间】:2014-05-14 22:21:43
【问题描述】:

我正在尝试使用此处提供的 colosift 检测器:colorDescriptor。我实际上是在尝试从 java 调用可执行的 colorDescriptror.exe 文件。我已经用 bat 文件运行它,我只想从我的 java 代码中调用 exe。我的代码如下:

Process process = new ProcessBuilder("colorDescriptor.exe", "image.jpg", " --detector densesampling  ","  --ds_spacing 6", " --ds_scales 1.2 ","  --descriptor opponentsift ", " --output out.descr").start();

InputStream is = (InputStream) process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;

可执行文件似乎正在运行,但我从 colorift 代码中收到错误消息:警告:没有要写入的输出文件。因此,我想知道哪种方法是在此处的可执行文件中解析我的参数的正确方法。

工作命令:

colorDescriptor image.jpg --detector densesampling --ds_spacing 6 --ds_scales 1.2 --descriptor opponentsift   --output out.descr

【问题讨论】:

    标签: java exec sift


    【解决方案1】:

    将参数对拆分为单独的参数,不带前导和尾随空格。例如:

    " --detector densesampling  "
    

    应该是:

    "--detector", "densesampling"
    

    对其他参数对进行相同的更改。否则,发布代码中的参数对将作为单个参数发送到底层程序,程序将无法识别。

    【讨论】:

    • 我已经尝试过这个 splitm,但是我得到了同样的错误。
    • @FereRes,您是否修剪了前导和尾随空格?
    • 是的,我忘记了空格,现在它正在工作。感谢您的回答。
    【解决方案2】:

    您传递给ProcessBuilder 的每个参数都将是传递给命令的参数,例如...

    Process process = new ProcessBuilder("colorDescriptor.exe", "image.jpg", " --detector densesampling  ","  --ds_spacing 6", " --ds_scales 1.2 ","  --descriptor opponentsift ", " --output out.descr").start();
    

    将导致将参数数组传递给可执行文件,从而生成一个包含 6 个元素的数组...

    • “图片.jpg”
    • " --检测器密集采样"
    • " --ds_spacing 6"
    • " --ds_scales 1.2"
    • " --descriptor 对手"
    • " --output out.descr"

    虽然这看起来不多,但通常情况下,每个空格都会在参数数组中产生一个单独的元素...

    Process process = new ProcessBuilder(
        "colorDescriptor.exe", 
        "image.jpg", 
        "--detector", "densesampling",
        "--ds_spacing", "6", 
        "--ds_scales", "1.2",
        "--descriptor", "opponentsift", 
        "--output", "out.descr").start();
    

    ProcessBuilder 的优点是您无需尝试引用或转义空格,如果您需要传递包含空格的路径,这非常方便。

    【讨论】:

      猜你喜欢
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-05
      • 2013-07-24
      • 1970-01-01
      相关资源
      最近更新 更多