我正在使用带有命令行实用程序的 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 内部线程正在调用该进程。我的猜测是对的吗?如果是,那么我该如何克服这个问题。
请指导我解决这个问题。感谢您!