0

私は自分が間違っていることを理解できません。私には2つの方法があります。これは機能します。

protected void applySelection(String adjustment, String action){
    if(!adjustment.equals("") || !action.equals("")){
        try{
            ClassLoader myClassLoader = this.getClass().getClassLoader();
            String myPackage = this.getClass().getPackage().getName();
            String classNameToBeLoaded = myPackage + "." + action + "." + adjustment;
            Class adjust = myClassLoader.loadClass(classNameToBeLoaded);
            Object whatInstance = adjust.newInstance();
            adjust.getMethod("setBitmap", new Class[]{Bitmap.class}).invoke(whatInstance, new Object[]{this.stage.getImage()});
            Bitmap bmp = (Bitmap)adjust.getMethod("applyFilter").invoke(whatInstance);
            if(bmp != null){
                Edit.this.stage.setStageImage(bmp);
                Edit.this.stage.showTopItems(bmp);
            }
        }catch(IllegalArgumentException e){
        }catch(IllegalAccessException e){
        }catch(InvocationTargetException e){
        }catch(Exception e){}
    }
}



次に、これは機能しません:

protected void setFromSlider(String adjustment, String action){
    if(!adjustment.equals("") || !action.equals("")){
        try{
            ClassLoader myClassLoader = this.getClass().getClassLoader();
            String myPackage = this.getClass().getPackage().getName();
            String classNameToBeLoaded = myPackage + "." + action + "." + adjustment;
            Class adjust = myClassLoader.loadClass(classNameToBeLoaded);
            Object whatInstance = adjust.newInstance();
            Object returnVal = adjust.getMethod("isSeekBar").invoke(whatInstance);
            if(returnVal == true){
                // Do something
            }else{
                // Do something else
            }
        }catch(NullPointerException e){
            e.getMessage();
        }catch(IllegalArgumentException e){
            e.getMessage();
        }catch(IllegalAccessException e){
            e.getMessage();
        }catch(Exception e){
            e.getMessage();
        }
    }
}

この行(2番目の方法):
Object returnVal = adjust.getMethod("isSeekBar").invoke(whatInstance);

ここに到達すると、ifステートメントをスキップして、メソッドの閉じ中括弧に直接移動します。何が原因ですか?呼び出されているメソッドは次のとおりです。

public boolean isSeekBar(){
    return true;
}

エラーをスローしていると思いますが、catchステートメントのいずれもエラーをキャッチしていません。私は今困惑しています...

4

1 に答える 1

0

より一般的なThrowableをキャッチしてみることができます-この関数がUIスレッドで実行された場合、例外は表示されません。

try{
     ...
}catch(Throwable e){
   // e.getMessage(); this would not print anything
   e.printStackTrace();
}

いずれの場合も、if(returnVal == true){コンパイルされません(互換性のないオペランドタイプObjectおよびboolean)

使用するif (returnVal.equals(true)) {

于 2012-11-07T21:55:20.423 に答える