CreateProcess error=5, 拒绝访问。
使用JAVA的Runtime.getRuntime().exec()遇到的bug
今天在使用一个wkhtmltopdf工具的时候需要用到JAVA的一个方法,*Runtime.getRuntime()返回当前应用程序的Runtime对象,该对象的exec()方法指示Java虚拟机创建一个子进程执行指定的可执行程序,并返回与该子进程对应的Process对象实例。通过Process可以控制该子进程的执行或获取该子进程的信息。。。。。。。*附一个对此功能的介绍链接:Runtime.getRuntime().exec()
报错的代码时这样,猜测原因是文件夹访问不到,或者无法调用到命令。
public class WKTest {
public static void main(String[] args) {
String cmd = "D:/programfiles/wkhtmltopdf/bin --quality 75 https://www.nowcoder.com D:\\work\\wk-images/3.png";
try{
Runtime.getRuntime().exec(cmd);
System.out.println("ok");
}catch(IOException e){
e.printStackTrace();
}
}
}
java.io.IOException: Cannot run program "D:/programfiles/wkhtmltopdf/bin": CreateProcess error=5, 拒绝访问。
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at java.lang.Runtime.exec(Runtime.java:620)
at java.lang.Runtime.exec(Runtime.java:450)
at java.lang.Runtime.exec(Runtime.java:347)
at com.nowcoder.community.WKTest.main(WKTest.java:15)
Caused by: java.io.IOException: CreateProcess error=5, 拒绝访问。
在java中,RunTime.getRuntime().exec()实现了调用服务器命令脚本来执行功能需要。也就是说这行代码对文件夹是无法操作的,必须访问完文件夹中的脚本,我这里主要是调用一个.exe文件,修改如下:
public class WKTest {
public static void main(String[] args) {
String cmd = "D:/programfiles/wkhtmltopdf/bin/wkhtmltoimage.exe --quality 75 https://www.nowcoder.com D:\\work\\wk-images/3.png";
try{
Runtime.getRuntime().exec(cmd);
System.out.println("ok");
}catch(IOException e){
e.printStackTrace();
}
}
}
测试正常:
ok
Process finished with exit code 0