2012-11-07 87 views
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(); 
     } 
    } 
} 

在這條線(在第二個方法):
Object returnVal = adjust.getMethod("isSeekBar").invoke(whatInstance);

當它到達這裏時,它只是跳過我的if語句並直接進入方法的右大括號。是什麼原因造成的?這裏是被調用的方法:

public boolean isSeekBar(){ 
    return true; 
} 

我假設它是拋出一個錯誤,但沒有捕獲語句捕捉一個。我現在難倒了...

+0

可能會出現一些異常出現? – kosa

+0

在你的'catch'塊中,你正在檢索異常消息並且什麼也不做。嘗試將消息記錄到'System.err' –

+0

對於每個catch語句,我做了System.err.append(e.getMessage());並沒有任何內容被髮送到錯誤控制檯。 –

回答

0

您可以嘗試捕獲更通用的Throwable - 如果此功能在UI線程中執行,您將看不到異常。

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

在任何情況下,if(returnVal == true){不編譯(數不兼容對象類型和布爾)

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

+0

謝謝!修復了不兼容問題,但仍未解決原始問題。什麼是通用Throwable?我對Java仍然很陌生。 –

+0

我編輯了我的答案以澄清。順便說一句,我運行你的代碼,它適用於我。另外,'e.getMessage()'不會打印任何東西 – thedayofcondor

+0

你的權利,它確實有效。我重新啓動了Netbeans,代碼突然開始以我期望的方式工作。 –

相關問題