2012-03-23 9 views
1

argにmainのクラス名を与えると、引数は "myPackage.Algo.PersonneA"です。私には例外があり、理由は分かりません。メインに引数を与える

スレッドの例外 "メイン" にjava.lang.ClassNotFoundException: myPackage.Algo.PersonneA

これは私のメインです:

public static void main(String[] args) { 
     Algo rf = (Algo) Class.forName(args[0]).newInstance(); 

    } 

と、これはあります私がmainにinstanciateしたいクラス。

package myPackage; 
public class Algo { 
    public static class PersonneA extends ClassA { 
     public Algorithm create(int r) { 
      return new AlgorithmDist(new DistributedDocument(), r); 
     } 
    } 

    public static class PersonneB extends ClassA { 
     public Algorithm create(int r) { 
      return new AlgorithmSimul(new SimulationDocument(), r); 
     } 
    } 
} 

答えて

1

あなたのメインは、次のようになります。

public static void main(String[] args) { 
     Algo rf = (Algo) Class.forName(args[0]).newInstance(); 

    } 

をあなたが書いた:static public void main(String[] args)を間違った構文である:)

+2

ではないので、問題1を固定した後、あなたはまだ、ClassCastExceptionを取得します。問題が構文エラーの場合、コンパイル時にエラーが発生します。彼はランタイムエラーを取得します。 – amit

+0

はい!しかし、これは私の問題を解決しません:D – Mehdi

+0

申し訳ありません、それはあなたのパッケージとは何か関係があります。 Algoクラスはメインクラスの内部クラスですか、それとも自分のJavaファイル内のメインクラスですか?あなたのJavaファイルが以下で始まることを確認してください:package myPackage; (彼らがそのパッケージに入れられている場合) –

5

2つのこと:

(1)について内部クラス、forName()に文字列を渡す必要があります:

"myPackage.Algo$PersonneA" 
      ^
      instead of . 

内部クラスは$でなく.で囲むクラスから区切られています。
引数をmain()に変更して上記の文字列に変更してください。

(2)PersonneAAlgoClassAないのサブクラスである - ので、タイプPersonneAの目的は、これは間違っているタイプAlgo

+0

ありがとうございますAmit:D – Mehdi

+0

あなたは大歓迎です@Mehdi。お役に立てて嬉しいです。 – amit

関連する問題