java 调用可执行文件时,ProcessBuilder异常CreateProcess error=2

java 调用其他应用程序时,可能在windows下没有问题,但是转到linux下,却会报这样那样的错误,比如有设计文件操作会报FileNotFoundException等等(如下代码):

1             ProcessBuilder builder = new ProcessBuilder();
2             builder.command(ffmpeg -i /data/download_video/20160425/20160425235938929164582_1.flv -y -vcodec libx264 -vpre ultrafast -vpre baseline -cqp 28 -coder 0 -refs 3 -deblockalpha 1 -deblockbeta -1 -me_method umh -subq 9 -me_range 32 -trellis 2 -chromaoffset -2 -nr 0 -b_strategy 1 -bframebias 0 -directpred 3 -g 250 -i_qfactor 1.3 -b_qfactor 1.4 -flags2 +bpyramid+wpred+mixed_refs+8x8dct -acodec libfaac -s  640*360 -b 532000 -ab 58000 -r 15 -pass 1 /data/video/output/20160425/20160425235938929164582_1_06400360.mp4);
3        builder.start();4         ..........

原因:  不同的操作系统指令之间如果存在空格,可能会出现无法识别指令的错误。

解决方法:  指令中有空格的需要用不同的字符串分开,将指令用空格进行split,通过数组方式进行指令传值,使用API:

      public ProcessBuilder command(String... command)

可参考ProcessBuilder  类说明:

Constructs a process builder with the specified operating system program and arguments. This is a convenience constructor that sets the process builder‘s command to a string list containing the same strings as the command array, in the same order. It is not checked whether command corresponds to a valid operating system command.

Parameters:
command a string array containing the program and its arguments
时间: 2024-10-16 19:54:28

java 调用可执行文件时,ProcessBuilder异常CreateProcess error=2的相关文章

ProcessBuilder异常CreateProcess error=2, ??Õ?»µ½?¶

后面那堆乱码使我知道只好用谷歌去查一下问题答案,翻着翻着就有了启发. 首先自己在捣鼓如何获取APK信息,然后了解了一下ProcessBuilder类,具体这个类如何获取APK信息,我另外写了一篇分析这个类的文章: public class TestProcess { public static void main(String[] args) { ProcessBuilder pb = new ProcessBuilder(); pb.redirectErrorStream(true); try

执行enable-migrations时,报“使用“2”个参数调用“SetData”时发生异常:“程序集“Microsoft.VisualStudio.TeamArchitect.ModelingProject,..”

今天打开MVC项目(Code-First),打算手动更新数据库,所以直接在"程序包管理控制台"中执行如下命: enable-migrations -contexttypename BJYLOnlineServ.Areas.Enterprise.DAL.EnterpriseContext  -MigrationsDirectory Migrations\Enterprise: 控制台直接给了我一个这样的错误,我奇怪了,之前还好好的啊,怎么回事了.错误: PM> enable-mig

java调用静态函数时是否会调用构造函数

今天在看<think in java>时,有个问题没搞懂:在调用一个静态函数时,该类的构造函数是否会被调用.在网上并未找到相关内容,不如动手来试试结果. 1 public class test { 2 public test() { 3 System.out.println("constructor"); 4 } 5 public static void print() { 6 System.out.println("static"); 7 } 8 pu

java 执行可执行文件时提示“could not find or load main class ”的问题

[转] Android自动化测试之使用java调用monkeyrunner(五)

Android自动化测试之使用java调用monkeyrunner 众所周知,一般情况下我们使用android中的monkeyrunner进行自动化测试时,使用的是python语言来写测试脚本.不过,最近发现可以用java调用monkeyrunner Api,用java语言写测试脚本. 于是,就简单研究了一下.这里做一些总结.希望有对在研究的午饭可以有所用处. 开始时,搜素到一些零碎的教程,说使用java调用monkeyrunner时,需要导入android sdk  tools路径下的lib里

解决方案--java执行cmd命令ProcessBuilder--出错Exception in thread "main" java.io.IOException: Cannot run program "dir d:\": CreateProcess error=2(xjl456852原创)

当我尝试在java中通过ProcessBuilder运行window的cmd命令时出现错误: public static void main(String [] args) throws IOException { ProcessBuilder builder = new ProcessBuilder(); Process process = builder.command("dir d:\\").start(); InputStream inputStream = process.g

原!! java直接打印一个对象时,并不是直接调用该类的toString方法 ,而是会先判断是否为null,非null才会调用toString方法

网上看了好多java直接打印一个对象时,直接调用该类的toString方法 . 但是: Object obj=null; System.out.println(obj);//没有报错 System.out.println(obj.toString());//报空指针异常 System.out.println(obj);既然也是直接调用toString方法,为什么不报错??? 原因总结如下: 1.调用Object类的toString方法,必须保证object不是null值,否则将抛出NullPoi

从0开始学Java:运行时异常与一般异常有何异同?

无限互联从0开始学Java系列之JAVA相关基础知识,Java基础培训,String 和StringBuffer的区别 1.Java基础学习,从0开始学Java:String 和StringBuffer的区别? JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据.这个String类提供了数值不可改变的字符串.而这个StringBuffer类提供的字符串进行修改.当你知道字符数据要改变的时候你就可以使用StringBuffer.典型

Java编写程序时要考虑到所有可能的异常

要考虑到所有可能出现异常的情况,并对异常做处理操作,日志记录,不然程序会终止运行 public void downFromCloud(String inputDir, String outputDir) { Configuration conf = new Configuration(); // 实例化一个文件系统 FileSystem fs = null; FSDataInputStream in = null; Path[] paths = null; OutputStream outs =