2012-03-23 58 views
8

もう1つの質問はすばやく続きますが、これは私が見ていない本当に明白なエラーでなければなりません。私は以下のバッチファイルを実行するいくつかのコードを書いたが、ファイルを見つけることができないというエラーメッセージが表示されていますが、ファイルがディレクトリに存在することを保証することができます!ProcessBuilderはファイルを見つけることができません。

public class Pull { 

public void pullData() throws IOException { 
    ProcessBuilder pb = new ProcessBuilder("adb.bat"); 
    File f = new File("C:\\"); 
    pb.directory(f); 
    Process p = pb.start(); 
} 

public static void main(String[] args) throws IOException { 
    Pull pull = new Pull(); 
    pull.pullData(); 
} 

}

と、ここで私は、Linuxを実行しているんだけど、私はあなたのコード(.SHを実行するように変更はなく、実行時に同じエラーが発生するエラーメッセージ

Exception in thread "main" java.io.IOException: Cannot run program "adb.bat" (in directory "C:\"): CreateProcess error=2, The system cannot find the file specified 
+0

したがって、adb.batはc:\にありますか?それをプロジェクトフォルダ – keyser

+0

に置いてみてください。私はprocessbuilderを正しく使用していますか? – Rookie

+0

バッチファイルの内容を 'ProcessBuilder'の引数として実行しようとしましたか?例えば、 "adb.bat"が "java -version"のようなことをしたら、あなたは '新しいProcessBuilder(" java "、" - server ")'のようなことをやってみましたか?私はJavaが実行可能ファイルのようにadb.batを処理しようとしているのかどうか疑問に思っています。本当に単なるテキストベースのスクリプトです。 – CodeBlind

答えて

11

です。コウモリ)。

試してみてください。

ProcessBuilder pb = new ProcessBuilder("c:\\adb.bat"); 

どうやらProcessBuilder.directory作業ディレクトリビルダーを構築した際に選択されました(実行を発見する目的で、)には影響しません使用して(少なくとも、それがに思えるものですドキュメントは作業ディレクトリを変更すると言いますから、入力/出力ファイルはそれに関連していると思います)。

実際に内部で何をしているのかよく分かりませんが、コンストラクタが問題を修正しました。

このポストはtalks about the problem and this solutionであるだけでなく、環境変数を設定する必要があるかどうかを判断します。ProcessBuilderが実行ファイルを発見するのに便利です。

2

こんにちは、このチュートリアルを試してみてください - http://www.javabeat.net/examples/2007/08/21/using-the-new-process-builder-class/。それを使用してクラスを少し変更し、ファイルを見つけます(内部に何が入っているかわからないので、完全にテストできません)。それは問題なくコンパイルされて実行されますが、自分自身と同じ問題が発生します。

public class Pull { 


public void pullData() throws IOException { 
    /*ProcessBuilder pb = new ProcessBuilder("adb.bat"); 
    File f = new File("C:\\"); 
    pb.directory(f); 
    Process p = pb.start(); 
    */ 
    ProcessBuilder p = new ProcessBuilder("C:\\adb.bat"); 
    p.start(); 
    System.out.println(p.toString()); 
} 


public static void main(String[] args) throws IOException { 


    Pull pull = new Pull(); 
    pull.pullData(); 

} 


} 
関連する問題