2012-05-13 14 views
1

ProcessBuilderを使用してプロジェクトでクラスを実行する際に問題が発生します。 マイコード:Java 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(); 
     } 
    } 
} 

クラスのプログラムは、同じプロジェクト(同じbinフォルダ)にあり、直接実行した場合正常に動作しますが、私はエラーを取得するこの方法は、「メインクラスが見つかりませんでした:プログラム」。私のコードのどこにエラーがありますか?

ありがとうございます。

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

+0

***パッケージ***はクラス 'プログラム'ですか? 'params.add(" Program ");'で完全修飾クラス名を指定する必要があります。 –

+0

パッケージを持つクラスはありません。いずれにしても、変更された 'build.test package 'の両方に' params.add( "build.test.Program"); 'という名前を付けました。まだ同じエラー – Ciro

+0

'pathToJar'の値を出力しようとしましたか?それはあなたが期待するものですか? –

答えて

2

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

1

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

(あなたがjavaw実行ファイルを起動しているので、それは問題ではありません。それは、それは別の診断を与えているだろうので、あなたのエントリポイントメソッドのシグネチャは、正しくないこともないです。)

問題クラス名が間違っているか(例えば、 "come.pkg.Program"でなければならない)か、JARファイルのパス名が正しくないかのいずれかです。


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

+0

印刷されたジャーパス、その罰金。パッケージでも同じエラーがテストされています。 – Ciro

+0

エントリーポイントが間違っている可能性があります。上記のいずれにも役立たない場合は、 'Program'クラスのシグネチャと' main'メソッドを表示してください。 –

関連する問題