从SAS调用java类。错误:找不到课程

时间:2015-12-04 19:39:39

标签: java sas sas-macro

    data Numbers;
        do i=1 to 10;
            output;
        end;
    run;

    data PrimeNumbers;
        set Numbers;
        if _N_=1 then declare javaobj j("C:\Program Files\Java\jdk1.7.0_10\bin\checkPrimeNumber");
        isPrimeNumber=j.callIntMethod("checkPrimeNumber",i);
        if isPrimeNumber=1 then output;
    run;


    /*-SET CLASSPATH "C:\Program Files (x86)\Java\jre7\bin"*/


    /*--------------------------Sample java code----------------------------
    public class checkPrimeNumber 
    {
        public checkPrimeNumber() 
        {
        }
        public static void main(String args[]) 
        {
            checkPrimeNumber CPN=new checkPrimeNumber();
            System.out.println ("Result:"+CPN.checkPrimeNumber(23));
        }
        public int checkPrimeNumber(int num) 
        {
            for (int i=2; i<=(num/2); i++) 
                if ((num%i) == 0)
                 return 0;
            return 1;
        }   
    }
    --------------------------------------------------------------------------*/

日志:-------&GT;

        ERROR: Could not find class C:\checkPrimeNumber at line 45 column 44.  Please ensure that the
               CLASSPATH is correct.
        ERROR: DATA STEP Component Object failure.  Aborted during the EXECUTION phase.
        java.lang.ClassNotFoundException: C:\checkPrimeNumber
             at java.net.URLClassLoader$1.run(Unknown Source)
             at java.security.AccessController.doPrivileged(Native Method)
             at java.net.URLClassLoader.findClass(Unknown Source)
             at java.lang.ClassLoader.loadClass(Unknown Source)
             at java.lang.ClassLoader.loadClass(Unknown Source)

我已将CLASSPATH环境变量设置为 C:\Program Files\Java\jdk1.7.0_10\bin并编译了&amp;从命令提示符执行程序。代码在命令提示符下工作正常。但SAS代码抛出错误,所以我添加了-set CLASSPATH C:\ Program Files \ Java \ jdk1.7.0_10 \ bin statement in sasv9.cfg located at SASFoundation \ 9.3 \ nls \ en` 。我仍然得到相同的错误(与上面提到的相同)。可能有什么不对?我应该在SAS文件/文件夹中添加classpath变量,以便SAS识别java类路径?

2 个答案:

答案 0 :(得分:2)

在sasv9.cfg文件中,您应该查找-JREOPTIONS选项。在此选项中添加参数-Dsas.app.class.path

的路径

在数据步骤中声明java对象时,您只能传递类名 - 而不是所有路径。因此声明应如下:

declare javaobj j("checkPrimeNumber")

最后一个。 java方法的返回值传递给数据步骤函数中的最后一个参数。调用java方法应该是这样的:

j.callIntMethod("checkPrimeNumbers",i,isPrimeNumber);

干杯, 克里斯

答案 1 :(得分:0)

尝试运行PROC JAVAINFO以确定您的类路径是否设置正确。可以在不同的地方以多种方式设置类路径。完全有可能在以后的加载过程中被覆盖。

另外,您在哪种服务器上运行代码?是远程还是本地?

要在datastep中设置运行时的类路径,请遵循以下建议:http://support.sas.com/kb/38/518.html

Vasilij