MATLAB / Datafeed使用Bloomberg APIv3 / Java库编译代码:Java Exception

时间:2014-09-10 17:48:46

标签: java matlab exception datafeed

我试图通过Datafeed工具箱编译使用Bloomberg的APIv3的MATLAB代码。代码在MATLAB中运行良好。编译器在没有Java的代码上工作正常。 javaclasspath通过以下方式引用API:

DYNAMIC JAVA PATH

C:\blpv3\API\APIv3\JavaAPI\v3.7.1.1\lib\blpapi3.jar

我在编译时得到了几个与Java相关的编译错误(下面的堆栈跟踪):

mcc -m -R -startmsg -R -completemsg -v my_prog.m

我想我需要告诉mcc更明确地链接到blpapi3.jar,但是如何?我是否需要设置静态Java路径?

非常感谢任何帮助!


Warning: A Java exception occurred getting the method description for the
java.util.Locale class:

Java exception occurred:
java.lang.NoClassDefFoundError: com/bloomberglp/blpapi/Session
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Unknown Source) 
    at java.lang.Class.privateGetPublicMethods(Unknown Source) 
    at java.lang.Class.getMethods(Unknown Source)
    at com.mathworks.jmi.OpaqueJavaInterface.doesMethodExist(OpaqueJavaInterface.java:407)
Caused by: java.lang.ClassNotFoundException: com.bloomberglp.blpapi.Session
    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 sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
... 5 more 

1 个答案:

答案 0 :(得分:0)

经过多次浏览和大量试验,我已经解决了这个问题。答案已在本网站的几个帖子中。无论如何,有几个问题......

1

似乎

发生Java异常:java.lang.NoClassDefFoundError

是运行时错误,而不是编译错误。为了解决这个问题,我更新了位于,

的编译器和MCR中的classpath.txt

$ matlabroot \工具箱\本地\ classpath.txt

这样的事情

  
    

javaclasspath

  
    STATIC JAVA PATH

C:\Program Files\MATLAB\R2012a\java\patch                                                       
C:\blpv3\API\APIv3\JavaAPI\v3.7.1.1\lib\blpapi3.jar       

或者,可以将blpapi3.jar复制到

$ matlabroot / JAVA / jarext

与其他JAR文件一起使用。

另外,我删除了动态java路径,它只适用于Matlab IDE。

2

我已经在startup.m中使用

等子句禁用了ADDPATH
  
    

if~isdeloyloy&& 〜ismcc         addpath D:\ Matlab         ...     端

  

3

mcc的参数必须包括源文件所在的目录,即

  
    

mcc -m -I' source_file_dir' -v top_level_function.m

  

4

处理代码中的文件时,相对于$ matlabroot引用,例如

  
    

如果已部署        sFile_Path = fullfile(matlabroot,' ..','输入',sFile_Name);     其他        sFile_Path = which(sFile_Name);     端

  

5

请注意,MCR的$ matlabroot与Matlab IDE的$ matlabroot不同。