2012-03-23 26 views
1

當我給args中main的類的名字時,參數是: 「myPackage.Algo.PersonneA」。我有一個例外,我不知道爲什麼?給主要的參數

異常線程 「main」 拋出java.lang.ClassNotFoundException: myPackage.Algo.PersonneA

這是我的主:

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

    } 

,這是一個上課我主要想要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

這是錯誤的類型不。如果問題是語法錯誤,他會得到編譯時錯誤。他得到一個運行時錯誤。 – amit 2012-03-23 10:25:43

+0

是的cours!但是這並不能解決我的問題:D – Mehdi 2012-03-23 10:26:34

+0

好吧,它可能與你的軟件包有關。你的Algo類是你的主類的內部類,還是你自己的java文件中的主類?確保你的java文件開始於:package myPackage; (如果他們被放在那個包裏) – 2012-03-23 10:29:59

5

兩件事情:

(1)

內部類,你需要傳遞給 forName()字符串:

"myPackage.Algo$PersonneA" 
      ^
      instead of . 

內類是從封閉類分隔用$並且未使用.
因此,將參數改爲main()爲上述字符串,而不是您提供的字符串。

(2)PersonneAClassA子類,而不是Algo - 因此,解決問題1之後,你仍然會得到一個ClassCastException,因爲PersonneA類型的對象是Algo

+0

謝謝你阿米特:D – Mehdi 2012-03-23 11:17:28

+0

非常歡迎@Mehdi。很高興我能幫上忙。 – amit 2012-03-23 16:06:33