我無法弄清楚我做錯了什麼。我有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();
}
}
}
在這條線(在第二個方法):
Object returnVal = adjust.getMethod("isSeekBar").invoke(whatInstance);
當它到達這裏時,它只是跳過我的if語句並直接進入方法的右大括號。是什麼原因造成的?這裏是被調用的方法:
public boolean isSeekBar(){
return true;
}
我假設它是拋出一個錯誤,但沒有捕獲語句捕捉一個。我現在難倒了...
可能會出現一些異常出現? – kosa
在你的'catch'塊中,你正在檢索異常消息並且什麼也不做。嘗試將消息記錄到'System.err' –
對於每個catch語句,我做了System.err.append(e.getMessage());並沒有任何內容被髮送到錯誤控制檯。 –