ECC200 データ マトリックス バーコードのイメージ ファイルを読み取り、その内容を読み取り、デコードされたメッセージを標準出力に書き込むコマンド ライン ユーティリティが付属する libdmtx を使用しています。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の内部スレッドが原因で、プログラムにこれほど多くの時間がかかっていると思います。私の推測は正しいですか?はいの場合、どうすればこの問題を克服できますか。
この問題を解決するために私を導いてください。ありがとうございます!