2014-02-06 4 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이 도움이된다고 생각합니다. 본질적으로 스크립트는 명령을 가져와야합니다. 가정 명령은

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

commands/ 당신이 명령이있는 경우 'IfNegative'이라는 파일에 있어야합니다 점에 유의하여 주시기 바랍니다 디렉토리입니다 'IfNegative.bsh'.

2

@Manuelarte : 모든

첫째, 당신이 만든 컴파일 명령의 이름이 IfNegative하지 IfNotNegative 이다 둘째, 당신은 당신의 컴파일이 같은 명령이 포함 된 패키지를 가져와야합니다.

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

이 하나의 패키지로 컴파일 된 클래스의 모든 넣을 수 있습니다,이 가져 오기 당신은 그들 모두에 액세스 할 수 있습니다.

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); 
    } 
} 
이 제대로 작동하려면 TestFormulaParser은 다음과 같이해야합니다에 대한
지금 당신은 당신의 자바 코드에서으로 Beanshell 스크립트를 호출 할