1

Java コードを使用して、Linux で Linux 以外のコマンドを呼び出そうとしています。そのコマンドに必要なライブラリは、私の Linux マシンにインストールされています。これは、Runtime.getRuntime().exec(); を使用してコマンドを呼び出す Java コードです。

このコマンドは、画像ファイルから borcode を読み取ってデコードし、コンソールに値を表示します。

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class demo {
    public static void main(String args[]){
        getcodes();
    }
    public void getCodes(){
        try 
        { 
            Process p; 
            String command[]=new String[3];
            command[0]="dmtxread ";
            command[1]="-n ";
            command[2]="/home/administrator/sandip/xyz.tif";
            System.out.println("Command : "+command[0]+command[1]+command[2]);
            p=Runtime.getRuntime().exec(command);

            System.out.println(p.waitFor());
            BufferedReader reader=new BufferedReader(new InputStreamReader(p.getInputStream()));
            String line=reader.readLine();
            System.out.print("Decoded      :- "+line);
        }
        }catch(IOException e1) {
            e1.getMessage();
            e1.printStackTrace();
        }catch(InterruptedException e2) {
            e2.getMessage();
            e2.printStackTrace();
        } 
    }
}

LinuxでこのJavaコードを実行すると、次の例外が発生します

例外の一部は次のとおりです。

コマンド: dmtxread -n /home/administrator/sandip/xyz.tif java.io.IOException: プログラム "dmtxread " を実行できません: java.io.IOException: エラー = 2、java.lang.ProcessBuilder にそのようなファイルまたはディレクトリはありません。 start(ProcessBuilder.java:475) at java.lang.Runtime.exec(Runtime.java:610) at java.lang.Runtime.exec(Runtime.java:483) at Leadertechbarcode.TwoDBarCodeReadHelper.getCodes(TwoDBarCodeReadHelper.java:53) )

次のコード行 p=Runtime.getRuntime.exec(Command) を呼び出した後、プログラムがハングすることがあります。

コードによって出力されたコマンドをコピーして端末で実行すると、正しく実行されます。

この問題で友達を教えてください。

Javaを使用してこのコマンドを呼び出す他の方法はありますか?

ありがとうございます!

4

1 に答える 1

2

使用Runtime.exec(String[])しているメソッドでは、最初の要素がコマンドであり、後続の要素が個別の引数であることが想定されています。そのため、スペースが含まれている場合は、基盤となるオペレーティングシステムに渡される前に、エスケープまたは引用符で囲まれます。

あなたの場合、command[0]には、コマンドの名前の後にスペースが続きます。これにより、システムは名前にそのスペースを含むコマンドを検索して実行します。これは見つかりません。

この問題を解決するには、の各要素の内容を囲むスペースを削除するか、command手動で連結して、代わりに単一の文字列としてRuntime.exec(String)メソッドに渡すことができます。「-n」引数の末尾にもスペースがあることに注意してください。おそらくそれも削除する必要があります。

于 2012-05-08T12:27:26.800 に答える