2013-08-06 70 views
3

我試圖將一個類導入到MVEL的實現中,並且出現以下錯誤:錯誤:類型爲com.MyApp.Main的預期接收者,但得到java.lang.Class <com.MyApp.Main>

[錯誤:類型com.MyApp.Main的預期接收器,但得到的java.lang.Class]

下面是設置MVEL方法:

public void runCode() { 
final String theCode = "Main.sendText();"; 
     System.setProperty("java.version", "1.6"); 

     new Thread(new Runnable() { 

     public void run() { 

      ParserContext context = new ParserContext(); 
      context.addImport("Main", Main.class);      
      Serializable compiled = MVEL.compileExpression(theCode, context); // compile the expresion 

       HashMap vars = new HashMap(); 
       vars.put("x", new Integer(10)); 
       vars.put("y", new Integer(10)); 

       Integer result = (Integer) MVEL.executeExpression(compiled, vars);   
     } 
    }).start(); 
} 

Main.class:

public void sendText(){ 
System.out.println("Success!"); 
} 

的logcat:

08-05 20:23:31.900: E/AndroidRuntime(19968): FATAL EXCEPTION: Thread-30751 
08-05 20:23:31.900: E/AndroidRuntime(19968): [Error: expected receiver of type com.MyApp.Main, but got java.lang.Class<com.MyApp.Main>] 
08-05 20:23:31.900: E/AndroidRuntime(19968): [Near : {... Main.sendText(); ....}] 
08-05 20:23:31.900: E/AndroidRuntime(19968):   ^
08-05 20:23:31.900: E/AndroidRuntime(19968): [Line: 1, Column: 1] 
08-05 20:23:31.900: E/AndroidRuntime(19968): at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:435) 
08-05 20:23:31.900: E/AndroidRuntime(19968): at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.optimizeAccessor(ReflectiveAccessorOptimizer.java:143) 
08-05 20:23:31.900: E/AndroidRuntime(19968): at org.mvel2.optimizers.dynamic.DynamicOptimizer.optimizeAccessor(DynamicOptimizer.java:67) 
08-05 20:23:31.900: E/AndroidRuntime(19968): at org.mvel2.ast.ASTNode.optimize(ASTNode.java:159) 
08-05 20:23:31.900: E/AndroidRuntime(19968): at org.mvel2.ast.ASTNode.getReducedValueAccelerated(ASTNode.java:115) 
08-05 20:23:31.900: E/AndroidRuntime(19968): at org.mvel2.MVELRuntime.execute(MVELRuntime.java:85) 
08-05 20:23:31.900: E/AndroidRuntime(19968): at org.mvel2.compiler.CompiledExpression.getDirectValue(CompiledExpression.java:123) 
08-05 20:23:31.900: E/AndroidRuntime(19968): at org.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:119) 
08-05 20:23:31.900: E/AndroidRuntime(19968): at org.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:113) 
08-05 20:23:31.900: E/AndroidRuntime(19968): at org.mvel2.MVEL.executeExpression(MVEL.java:969) 
08-05 20:23:31.900: E/AndroidRuntime(19968): at com.MyApp.KessilLightScenes$1.run(KessilLightScenes.java:136) 
08-05 20:23:31.900: E/AndroidRuntime(19968): at java.lang.Thread.run(Thread.java:856) 
08-05 20:23:31.900: E/AndroidRuntime(19968): Caused by: java.lang.IllegalArgumentException: expected receiver of type com.MyApp.Main, but got java.lang.Class<com.MyApp.Main> 
08-05 20:23:31.900: E/AndroidRuntime(19968): at java.lang.reflect.Method.invokeNative(Native Method) 
08-05 20:23:31.900: E/AndroidRuntime(19968): at java.lang.reflect.Method.invoke(Method.java:511) 
08-05 20:23:31.900: E/AndroidRuntime(19968): at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getMethod(ReflectiveAccessorOptimizer.java:1104) 
08-05 20:23:31.900: E/AndroidRuntime(19968): at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getMethod(ReflectiveAccessorOptimizer.java:987) 
08-05 20:23:31.900: E/AndroidRuntime(19968): at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:344) 
08-05 20:23:31.900: E/AndroidRuntime(19968): ... 11 more 

任何想法如何解決這個問題?謝謝

回答

6

這聽起來像您試圖訪問的方法可能需要是靜態的。

相關問題