2011-11-12 17 views
2

Eclipseプロジェクトの 'Street.class'は、パッケージtrafficcircleの\ binにあります。以下のエラーは、作成されたプロセスのstderrorからのものです。 Runtime.execが見つからなければ最初に不平を言うだろうと思ったんだけど...これで何が起こったの?Runtime.exec()がエラーを返しました:メインクラスを見つけることができませんでした

Process process = runtime.exec("java -classpath \\bin trafficcircle.Street 1 2"); 

'ストリート' である: 'ストリート' プロセスを実行します

コード

public class Street { 

/** 
* @param args 
* 0 - Simulation run time 
* 1 - Flow time interval 
*/ 
public static void main(String[] args) { 
    System.out.println(args[0]); 
    System.out.println(args[1]); 
    System.out.flush(); 
} 
} 

プロセスのプリントアウト:

エラー:検索またはメインクラスtrafficcircleをロードできませんでした。 .Street

処理exitValue:1

そして、はい、これはCMDライン上で動作します:

C:ブレント\ \ユーザー>のjava -classpath "D:\ Javaプログラム\ IPCTrafficCircle \ビン" trafficcircle.Street 1 2

+0

なぜ 'Runtime.exec()'を使用して、 'java.exe'でEclipse生成コードを実行しようとしていますか?参考までに、Eclipseには実行ボタンがあります。私はあなたが達成しようとしているものは見ません。 –

+0

'exec(...)'コマンドを持つクラスはどこで実行しましたか? – wannik

+0

テストするたびに実行ボタンを何回か押す必要はありません。このプログラムは、プロセスを作成し、それらが(学校向けに)コミュニケーションをとるプロセス間通信シミュレーションになります。 – Rooster

答えて

2

このコードは、java Testというコマンドラインを入力して、/binというフォルダで実行すると、予期した結果が得られます。

import java.io.BufferedReader; 
import java.io.InputStreamReader; 

public class Test { 
    public static void main(String[] args) throws Exception { 
     Process process = Runtime.getRuntime().exec(
       "java trafficcircle.Street 1 2"); 

     BufferedReader br = new BufferedReader(new InputStreamReader(
       process.getInputStream())); 
     String line; 
     while ((line = br.readLine()) != null) { 
      System.out.println(line); 
     } 
     br.close(); 
    } 
} 

ただし、Eclipseで実行しても結果は得られません。結果を得るには、クラスパスを設定する必要があります。

"java -cp /Users/wannik/Java/Workspace/MyProject/bin trafficcircle.Street 1 2"); 
+0

ご確認いただきありがとうございます。 Eclipseでフルパスを使用する必要があります。 – Rooster

1

Runtime.exec()があれば文句を言うだろうjavaが見つかりません。これは実行しているプロセスです。あなたが読んでいるメッセージはそのプロセスの出力から来ています。

実行しているものとコマンドラインで動作するものの違いに気づいていますか? それはの問題です。

実行しているJava JVMは、実行したいクラスを見つける必要があります。クラスパス(\bin)が正しくありません。

+0

それで、私のプロジェクトは作業ディレクトリとして見えないので、相対パスは使用できません。 – Rooster

+0

'\ bin'は相対パスではなく、絶対パスです。 '。\ bin'はそれがあなたのものを構造化した方法であれば相対パスになります。 –

+0

もちろん、絶対パスを使用すると動作しますが、複数のマシンでは動作しません。 – Rooster

関連する問題