2016-05-18 12 views
0

これはおそらく愚かな質問ですが、私は助けが必要です。(私は3時間自分で解決しようとしましたので、ブロックしないでください) 私はJavaファイルをコンパイルしようとしています別のディレクトリ。javaと別のパスでjavaをコンパイル

私はいくつかの.javaファイルを含むフォルダを取得しています。それらをコンパイルする必要があります。 with:

public boolean complie() throws Exception{ 

    Process pro = Runtime.getRuntime().exec("javac -cp "+location+"/*.java"); 
    String line = null; 
       BufferedReader in = new BufferedReader(
        new InputStreamReader(pro.getErrorStream())); 
       while ((line = in.readLine()) != null) { 
        System.out.println(name + " " + line); 
       } 
} 

エラーが発生します。 エラーは、フォルダ内の他のクラスの使用を指しています。 (error: cannot find symbol

"javac *.java"のフォルダに移動してCMDでコンパイルしようとすると、エラーはありません。

私を助けてください!


更新:

File pathToExecutable = new File(location); 
    ProcessBuilder builder = new ProcessBuilder(pathToExecutable.getAbsolutePath(),"javac *.java"); 
    builder.directory(new File(location).getAbsoluteFile()); // this is where you set the root folder for the executable to run with 
    builder.redirectErrorStream(true); 
    Process process = builder.start(); 

    Scanner s = new Scanner(process.getInputStream()); 
    StringBuilder text = new StringBuilder(); 
    while (s.hasNextLine()) { 
     text.append(s.nextLine()); 
     text.append("\n"); 
    } 
    s.close(); 

をしかしCreateProcess error=5, Access is deniedエラー(私は管理者としての私のIDEを実行している)

+0

問題は作業ディレクトリ。同じCMDウィンドウでJavaプログラムを実行していますか? –

+0

場所はどこに定義されていますか? –

+0

場所があるかもしれませんが、確かに場所を印刷してください。そして、相対位置であれば、 'exec(" pwd ")' –

答えて

1

一つ、この参照の取得:

私はTRIDいるlinkを.. (私は、あなたが与えた例では、あなたのフォルダを実行していて、あなたが与えた例ではないと思います)

2つは、ProcessBuilderをこのように呼ばれるべきである:

String classpath = "somePath" + File.pathSeparator + "otherpath"; 
ProcessBuilder builder = new ProcessBuilder("javac", "-cp " + classpath, "*.java"); 
builder.directory(new File(location)); 

その場所を想定し、このファイルは、コンパイルすることの.java含まれています...

UPDATE:このために働く少し例をコンパイルと実行:

package test; 

import java.io.BufferedReader; 
import java.io.File; 
import java.io.IOException; 
import java.io.InputStreamReader; 

public class Compile { 

    public static void main(String[] args) throws IOException { 
     ProcessBuilder builder = new ProcessBuilder("javac", "hello/*.java"); 
     builder.directory(new File("C:\\Users\\carlitos\\Desktop")); 

     Process pro = builder.start(); 
     String line = null; 
     BufferedReader in = new BufferedReader(new InputStreamReader(pro.getErrorStream())); 

     while ((line = in.readLine()) != null) { 
      System.out.println(line); 
     } 
     in.close(); 

     // executing... 
     ProcessBuilder builder1 = new ProcessBuilder("java", "hello.Main", "carlitosWay"); 
     builder1.directory(new File("C:\\Users\\carlitos\\Desktop")); 

     Process pro1 = builder1.start(); 
     in = new BufferedReader(new InputStreamReader(pro1.getInputStream())); 

     while ((line = in.readLine()) != null) { 
      System.out.println(line); 
     } 
     in.close(); 
    } 
} 

そしてメインクラス:

package hello; 

public class Main { 
    public static void main(String[] args) { 
     System.out.println("Hello: " + args[0]); 
    } 
} 

私の例では、 "C:/ Users/carlitos/Desktop"に "hello"という名前のフォルダがあり、 "Main"クラスが含まれていると仮定しています...

+0

こんにちは...私はコンパイルするのを助けましたが、今私はちょうど同じコードでコンパイルしたJavaプログラムを実行しようとしています。 'ProcessBuilder builder =新しいProcessBuilder( "java"、 "ex1"); \t \t builder.directory(新しいファイル(場所)); 'クラスパスはすべてのクラスとパッケージへのパスです。しかし、 'Error:メインクラスex1を見つけられませんでした。' –

+0

クラスがパッケージを宣言していますか?例: 'package dummy; ... public class ex1' ??もしそうなら、 'builder.directory()'はFileSystem Treeの "location"の上位レベルで呼び出されます。そして、 'new ProcessBuilder(" java "、" dummy.ex1 ")' ...私のために働く例を追加します...(また、私の答えに投票してください、それはあなたの質問を解決する).... –

関連する問題