Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么命令行实用程序在使用java程序调用时需要花费大量时间来提供输出?_Java_Linux_Multithreading_Process_Processbuilder - Fatal编程技术网

为什么命令行实用程序在使用java程序调用时需要花费大量时间来提供输出?

为什么命令行实用程序在使用java程序调用时需要花费大量时间来提供输出?,java,linux,multithreading,process,processbuilder,Java,Linux,Multithreading,Process,Processbuilder,我正在使用libdmtx,它附带一个命令行实用程序,用于读取ECC200数据矩阵条形码的图像文件,读取其内容,并将解码后的消息写入标准输出。我在linux平台上的java程序中使用了命令行实用程序。我正在使用ubuntu linux。我已经在我的linux机器上安装了libdmtx。当我调用命令时 dmtxread-n/home/admin/ab.tif 在linux终端上,它立即即在15秒内给出图像中条形码的解码值。 但是,当我要使用java程序为同一个文件调用同一个命令时,该程序需要花费大量

我正在使用libdmtx,它附带一个命令行实用程序,用于读取ECC200数据矩阵条形码的图像文件,读取其内容,并将解码后的消息写入标准输出。我在linux平台上的java程序中使用了命令行实用程序。我正在使用ubuntu linux。我已经在我的linux机器上安装了libdmtx。当我调用命令时

dmtxread-n/home/admin/ab.tif

在linux终端上,它立即即在15秒内给出图像中条形码的解码值。 但是,当我要使用java程序为同一个文件调用同一个命令时,该程序需要花费大量时间,即对于上面的同一个命令和同一个文件,平均需要16分钟

下面是调用上述命令的java代码

 public class Test {
 public static void main(final String[] args) throws IOException, InterruptedException {
     //Build command 
     List<String> commands = new ArrayList<String>();
     commands.add("dmtxread");
     commands.add("-n");
     commands.add("/home/admin/ab.tif");
     System.out.println(commands);
     //Run macro on target
     ProcessBuilder pb = new ProcessBuilder(commands);
     pb.redirectErrorStream(true);
     Process process = pb.start();

     //Read output
     StringBuilder out = new StringBuilder();
     BufferedReader br = new BufferedReader(new      InputStreamReader(process.getInputStream()));
     String line = null, previous = null;
     while ((line = br.readLine()) != null){
         System.out.println(line);
     }

     //Check result
     if (process.waitFor() == 0)
         System.out.println("Success!");
     System.exit(0);

     //Abnormal termination: Log command parameters and output and throw             ExecutionException
     System.err.println(commands);
     System.err.println(out.toString());
     System.exit(1);
 }
 }
公共类测试{
公共静态void main(最终字符串[]args)引发IOException、InterruptedException{
//生成命令
List命令=new ArrayList();
命令。添加(“dmtxread”);
命令。添加(“-n”);
commands.add(“/home/admin/ab.tif”);
System.out.println(命令);
//在目标上运行宏
ProcessBuilder pb=新的ProcessBuilder(命令);
pb.重定向错误流(真);
Process进程=pb.start();
//读取输出
StringBuilder out=新的StringBuilder();
BufferedReader br=新的BufferedReader(新的InputStreamReader(process.getInputStream());
String line=null,previous=null;
而((line=br.readLine())!=null){
系统输出打印项次(行);
}
//检查结果
if(process.waitFor()==0)
System.out.println(“成功!”);
系统出口(0);
//异常终止:记录命令参数、输出和抛出ExecutionException
System.err.println(命令);
System.err.println(out.toString());
系统出口(1);
}
}
我想问专家们

请任何人解释一下为什么java程序调用一个简单的命令要花这么长的时间,如果这个命令直接在命令提示符下运行,它将在15秒内被调用

谁能告诉我减少这一时间的方法吗

我猜这个程序花费了这么多时间,因为JVM的内部线程正在调用这个进程。我的猜测是对的吗?如果是,那么我如何克服这个问题

请指导我解决这个问题。谢谢你