2011-11-30 11 views
3

私の目的は、情報を観察したいクラスの名前をコマンドラインに読み込むことです。私がランタイムの前にクラス名を知っているとき、私は問題はありません。私が管理できないように見えるのは、文字列入力に基づいてクラスオブジェクトを作成する方法です。Java Reflection、Class Objects

public class Tester { 

    static void methodInfo2(Object obj) throws ClassNotFoundException { 
     //some stuff   
     System.out.print("Test!"); 

    } 

    public static void main (String args[]) throws ClassNotFoundException{ 
     String className = args[0]; 
     System.out.println("Class: "+className); 

     //myclass2 mc = new myclass2(); 
     //Class c = mc.getClass(); 
     Class argClass = Class.forName(className); 

     try { 
      methodInfo2(argClass); 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } 


    } 

} 

メインメソッドのコメントアウトされた2行は、コンパイルする前に私がクラス名を知っていたときの私の過去の出来事を示しています。次のコメントアウトされた行は、私が考えるべきことを示していますが、ClassNotFoundExceptionを受け取ります。クラスは確かに存在するので、私は何の問題があるのか​​よく分かりません。

答えて

7

つの提案:

  1. は、あなたがそれを完全修飾名(例えば"java.lang.Thread"だけでなく、"Thread")を与えていることを確認してください。
  2. コンパイルされたクラスファイルが実際にクラスパス上にあることを確認してください。
+0

お返事ありがとうございます!後でこのトピックを見つけた人には、私がelcipseのパッケージ内に自分自身を定義したかったクラスが問題でした。修正は、パッケージ名をクラス名の先頭に追加することでした: "packageName.myclass2" – Nibirue

2

Class.forNameは、実行時に名前でクラスをロードする正しい方法です。

引数が間違っているか、クラスがクラスパスに含まれていません。