1

我正在使用带有命令行实用程序的 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);
 }
 }

我想请教专家

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

请谁能告诉我减少这个时间的解决方案。

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

请指导我解决这个问题。感谢您!

4

0 回答 0