2014-02-06 47 views
0

我想創建一個與BeanShell庫一起使用的命令。我創造了這樣一個類:爲BeanShell創建一個編譯的Java命令

package org.manu.bshformulas; 

import bsh.CallStack; 
import bsh.Interpreter; 

public class IfNegative { 


    public static double invoke(Interpreter env, CallStack callstack, 
    double x, double y, double z) { 
     if(x < 0) { 
       return y; 
     } 
     return z; 
    } 

} 

而且我想在這個主類使用它:

package org.manu; 
// imports.... 

public class TestFormulaParser { 

    private static final String COMMAND = "IfNotNegative(x, y, y/x)"; 

    public static void main(String[] args) throws Exception { 
     double x=3; 
     double y=2; 

     Interpreter interprete = new Interpreter(); 
     interprete.set("x", x); 
     interprete.set("y", y); 
     double output = Double.valueOf(interprete.eval(COMMAND).toString()); 
     return output; 
    } 

但它給我說,它不承認IfNegative命令。

如何導入命令?

回答

0

我相信this answer可能會幫助你。實質上你的腳本必須導入這些命令。假設命令是一個目錄commands/

addClassPath("."); 
importCommands("commands"); 

請注意,如果你有一個命令「IfNegative」它必須是在一個名爲「IfNegative.bsh」。

2

@Manuelarte:

首先,編譯命令您創建的名稱爲IfNegative,而不是IfNotNegative 其次,你需要導入包含這樣你的編譯命令包。

importCommands("org.manu.bshformulas"); //import in bsh 

您可以將所有已編譯的類放入此單個包中,並且使用此導入可以全部訪問它們。
現在你從你的Java代碼調用BeanShell的腳本,使其正常工作TestFormulaParser應該如下:

public class TestFormulaParser { 

    private static final String COMMAND = "IfNegative(x, y, y/x)"; 

    private static final String IMPORT = "importCommands(\"org.manu.bshformulas\");"; 

    public static void main(String[] args) throws Exception { 
     double x = 3; 
     double y = 2; 
     Interpreter interprete = new Interpreter(); 
     interprete.set("x", x); 
     interprete.set("y", y); 
     interprete.eval(IMPORT); 
     double output = Double.valueOf(interprete.eval(COMMAND).toString()); 
     System.out.println("Output:" + output); 
    } 
}