私はあなたの提案と指導が必要です。 私はlibdmtxを使用しています。コマンドラインユーティリティには、ECC200 Data Matrixバーコードのイメージファイルを読み込み、その内容を読み込み、デコードされたメッセージを標準出力に書き出します。 私はこのコマンドラインユーティリティをLinuxプラットフォーム上の私のJavaプログラムで使いたいと思っています。私はubuntu linuxを使っています。 Linuxマシンにlibdmtxをインストールしました。私はLinuxの端末にJavaプログラムから呼び出されたときにコマンドラインユーティリティがハングするのはなぜですか?
/home/admin/ab.tif
dmtxread -nコマンドを実行するとき、それはすぐに、画像内のバーコードのデコード値を与えます。
私のjavaプログラムを使用してこのコマンドを呼び出すとき、コマンドの実行中にstuksコードが出力され、出力が得られます。 プログラムが処理中またはハングアップしているように見えます。続き
は私に私のコードが間違って起こっている友人を教えてください、次のコマンド
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
public class Classtest {
public static void getCodes(){
try
{
Process p;
String command[]=new String[3];
command[0]="dmtxread";
command[1]="-n";
command[2]="/home/admin/ab.tif";
System.out.println("Command : "+command[0]+command[1]+command[2]);
p=Runtime.getRuntime().exec(command); //I think hangs over here.
BufferedReader reader=new BufferedReader(new InputStreamReader(p.getErrorStream()));
String line=reader.readLine();
if(line==null){
reader=new BufferedReader(new InputStreamReader(p.getInputStream()));
line=reader.readLine();
System.out.print("Decoded :- "+line);
}else{
System.out.print("Error :- "+line);
}
System.out.println(p.waitFor());
}catch(IOException e1) {
e1.getMessage();
e1.printStackTrace();
}catch(InterruptedException e2) {
e2.getMessage();
e2.printStackTrace();
}
}
public static void main(String args[]){
getCodes();
}
}
を呼び出し、私のJavaコードです。
私は任意のヘルプ
http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=1
を得る私の友人を案内してください、次の資料が、くぼみに参照さ! ありがとうございました!
このコードはProcessBuilderクラスを使用したこのコードで、このコードは上記のコードと同じ出力を与えています。これは、行でハングするコードです Process process = pb.start();
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);
}
}
この問題を解決するために私を導いてください。 ありがとうございました!
ありがとうございました返信ありがとうございました!あなたが示唆したように私はコードをチェックしますが、エラーも出力もしません。 –
@ Param-Ganak:おそらく 'reader.readLine()'はプログラムが何かを出力するのを待っていますか? – Vlad
私は本当にどこにプログラムが間違っているのかわかりません。私は、コマンドが最初のコードで実行されるとき、プログラムはアプリケーションからの応答を待っていることを確信しています。 –