0

Activity Class Anmeldung、通常の Java クラスthread_haupt.classおよび Activity funktionen_haupt.class があります。

Anmeldung.classの Start で、threads_haupt.classの関数 (funktionstarter) を開始します。これにより、 invoke を介し て functionen_haupt.class から関数が呼び出されます。

アイデアは、他のクラスからも他の関数を開始できる関数を持つことです。 問題はjava.lang.InstantiationException: can't instantiate class … no empty constructor in my thread_haupt.class when I try to newInstance() (以下を参照) thread_haupt.class) java.lang.InstantiationException: クラスをインスタンス化できません … 空のコンストラクターがありません

Anmeldung.Class

public class anmeldung extends Activity implements OnClickListener{
@Override
    protected void onStart() { // start ist dann aufgerufen wenn alles gebaut ist
        // TODO Auto-generated method stub
        meine_funktionen.buttons_vorbereiten(this);

        /**
         * hier wirde zuerst der spinner befüllt
         */
        thread_haupt meinThread = new thread_haupt();
        //HOMEPAGE,naj.nuz.wz.wa.dc.kommunikation.allgemein kommunikation,naj.nuz.wz.wa.dc.drinkcoffee.helfer.allgemein helfer, Activity meineAct};
        meinThread.meine_parameter= new  Object[] {HOMEPAGE,kommunikation,helfer,meineAct};
        meinThread.meine_funktion="staedte_abfragen";
        meinThread.mein_context=this.getApplicationContext();
        meinThread.meine_activity=this;
        meinThread.thread_starten("staedte_abfragen"); // HERE !!!

スレッド.クラス

public class thread_haupt {

    public Object[] meine_parameter;
    public String meine_funktion;
    public Object mein_context;
    public Activity meine_activity;
    public allgemein mein_helfer = new allgemein();
    public funktionen_haupt meine_funktionen = new funktionen_haupt((Context) mein_context, meine_activity);

    /**
     * hier sollen die threads gestartet werden
     * @param threadName
     */
    public void thread_starten(String threadName){
        switch (threadName) {
        case "staedte_abfragen":
            //Thread thread = new Thread(new Runnable(){
                //hier hab ich das gefunden http://stackoverflow.com/questions/5161951/android-only-the-original-thread-that-created-a-view-hierarchy-can-touch-its-vi
                //public void run() {
                    //meine_funktionen.staedte_abfragen(HOMEPAGE,kommunikation,helfer, meineAct);
                    try {
                        meine_funktionen.funktionstarter("naj.nuz.wz.wa.dc.drinkcoffee.funktionen_haupt", meine_funktion, meine_parameter, mein_context);
                        // hier aufgehört dies startet nicht
                    } catch (NoSuchMethodException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IllegalArgumentException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IllegalAccessException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (InvocationTargetException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (InstantiationException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                //}
            //});
            //thread.start();
            break;

        default:
            break;
        }
    }


}

funktionen_haupt.class

public class funktionen_haupt extends Activity  {

    // CONTEXT empfangen von den die die klasse aufrufen
    Context mContext;
    Activity mActivity;

    allgemein kommunikation = new allgemein();
    naj.nuz.wz.wa.dc.drinkcoffee.helfer.allgemein helfer = new naj.nuz.wz.wa.dc.drinkcoffee.helfer.allgemein();



    public   funktionen_haupt(Context mContext,Activity mActivity){

        this.mContext = mContext;
        this.mActivity=mActivity;
    }
public void funktionstarter(String package_name,String funktion_name,Object[] arguments, Object meincontext) throws NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, java.lang.InstantiationException {
        //no paramater
        Method[] methoden;
        Class cls = null;
        Object obj = null;
        try {
            cls = Class.forName(package_name);
            obj = cls.newInstance(); // !!! HERE IS MY PROBLEM !!!!
            //Constructor<funktionen> obj = cls.getConstructor(cls);
            //funktionen dieklasse = obj.newInstance(null);

            //Object obj = FactoryRegistry.getFactory(cls).newInstance();




            methoden = cls.getDeclaredMethods();
            for (int i =0;i<=methoden.length-1;i++){
                if (methoden[i].getName().equals(funktion_name)){
                    Method method2 =cls.getDeclaredMethod(funktion_name, methoden[i].getParameterTypes());
                    if (meincontext==null){
                        method2.invoke(obj, arguments);
                    }
                    else{
                        method2.invoke(meincontext, arguments);
                    }

                    break;
                }
            }


        } catch (ClassNotFoundException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            methoden = cls.getDeclaredMethods();
            for (int i =0;i<=methoden.length-1;i++){
                if (methoden[i].getName().equals(funktion_name)){
                    Method method2 =cls.getDeclaredMethod(funktion_name, methoden[i].getParameterTypes());
                    method2.invoke(this, arguments);
                    break;
                }
            }
        }

    }

私は例外を取得します

cls = Class.forName(package_name);
obj = cls.newInstance();  // java.lang.InstantiationException: can't instantiate class … no empty constructor

理由はわかりません。

何が問題なのか、なぜ機能しないのか、何が間違っているのか教えてもらえますか? 前もって感謝します。

4

1 に答える 1

0

異なるパラメーターでコンストラクターを宣言したため、既定の (空の) コンストラクターはなくなりました。デフォルトのコンストラクターは、別のコンストラクターを定義していない場合にのみ使用できます。次のように空のコンストラクターを作成できます。

public   funktionen_haupt(){
}
public   funktionen_haupt(Context mContext,Activity mActivity){
    this.mContext = mContext;
    this.mActivity=mActivity;
}

パラメータを使用してオブジェクトを作成する場合は、 newInstance() メソッドを使用せず、コンストラクタを呼び出すだけです。

于 2014-04-07T13:06:22.637 に答える