从ProcessBuilder调用时可执行文件失败,但不是从命令行调用

时间:2014-02-03 01:07:56

标签: java command-line process phantomjs image-capture

我正在尝试使用我的Java程序中的PhantomJS运行一个简单的图像捕获脚本。最终目标是自动化截取特定网页的截图。

我的问题是,当我运行以下代码时,程序退出时返回值为-1,并且不会生成任何图像:

Process process = new ProcessBuilder("C:\\PhantomJS\\phantomjs.exe", "imagecap.js", "http://www.google.com", "google.png").start();
process.waitFor();
System.out.println("Program exited with: " + process.exitValue());

但是,当我从windows命令提示符运行等效命令时:

C:\PhantomJS\phantomjs.exe imagecap.js http://www.google.com google.png

运行正常并生成正确的.png文件。


我也尝试让Java通过cmd.exe以管理员身份运行命令,但没有运气:

Process process = Runtime.getRuntime().exec("runas /profile /user:Administrator \"cmd /c start /wait" +
    "C:\\PhantomJS\\phantomjs.exe imagecap.js http://www.google.com google.png\"");

上面的代码像第一个例子一样返回1而不是-1,虽然我不知道为什么。


我通过PhantomJS运行的微小Javascript脚本是:

var page = require('webpage').create();
page.viewportSize = { width: 1600, height: 1024 };
var system = require('system');

page.open(system.args[1], function() {  
    page.render(system.args[2])
    phantom.exit();
});

我完全知道脚本有效,我可以手动运行它,它可以完美运行。

我想知道是否有人可以向我解释为什么我尝试使用Java运行此操作失败。

0 个答案:

没有答案