1

プロジェクトで ProcessBuilder を使用してクラスを実行する際に問題が発生しています。私のコード:

public class Main {
    public static void main(String[] args) {
        try {
            String pathToJar = Main.class.getProtectionDomain().getCodeSource()
                    .getLocation().toURI().getPath();
            ArrayList<String> params = new ArrayList<String>();    
            params.add("javaw");
            params.add("-classpath");
            params.add(pathToJar);
            params.add("Program");
            ProcessBuilder pb = new ProcessBuilder(params);
            Process process = pb.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class Program は同じプロジェクト (同じ bin フォルダー) にあり、直接実行すると正常に動作しますが、この方法では「メイン クラスが見つかりませんでした: Program」というエラーが表示されます。私のコードのどこにエラーがありますか?

前もって感謝します。

[編集] Program クラスの一部のコードでエラーが発生しているという結論に達しました。基本的には「クリーン」メインでのみ実行されます。Eclipse では、Program クラスは jar ファイル内にあるいくつかのライブラリをインポートしています。ProcessBuilder で参照する必要はありませんか? もしそうなら、どのように?

4

2 に答える 2

2

あなたの編集に応じて:

params.add(pathToJar);で切り替えることにより、現在のパスを追加できますparams.add(System.getProperty("java.class.path").concat(";").concat(pathToJar))‌​;

于 2012-05-13T03:16:01.420 に答える
1

私のコードのどこにエラーがありますか?

(実行可能ファイルを起動しているjavawので、それは問題ではありません。また、エントリ ポイント メソッドの署名が正しくないということでもありません。別の診断結果が得られるからです。)

問題は、クラス名が正しくないか (「come.pkg.Program」の場合)、または JAR ファイルのパス名が正しくないことです。


クラス名が間違っている可能性を排除したと仮定すると、JAR ファイルに相対パス名を使用しようとしていると推測されますが、現在のディレクトリが何であるかについて混乱があります。つまり、パス名を解決する必要があるディレクトリです。classpath パラメータで絶対パス名を使用してみてください。

于 2012-05-13T02:26:24.480 に答える