从java调用matlab函数时的异常

时间:2017-04-06 22:08:42

标签: java matlab matlab-compiler

我在matlab 2015b中使用库编译器编译了matlab函数,我怀疑pca函数是异常的来源,因为我已经做了一个简单的添加函数并且执行没有任何问题,我该如何执行pca函数? ?

Matlab功能:

function [ COEFF,SCORE,latent] = ACP( path )

 Data = fileread(path);
 Data = strrep(Data, ',', '.');
 FID = fopen('comma2pointData.txt', 'w');
 fwrite(FID, Data, 'char');
 fclose(FID);
 Data=importdata('comma2pointData.txt','\t');

[COEFF,SCORE,latent] = pca(Data);

end

Java代码:

    String path = "/Desktop/datamicro.txt";
    Object[] result = null;
    acpClass acp = null;

        try {                
            acp = new acpClass();
            result=acp.ACP(3, path);
        } catch (MWException ex) {
            Logger.getLogger(CalculAcpFrame.class.getName()).log(Level.SEVERE, null, ex);

        } finally {

            MWArray.disposeArray(result);
            acp.dispose();

        }

datamicro.txt

    0,25    0,16    0,95    0,53    0,22    1,17    549,00  
    0,20    0,06    0,39    0,62    0,18    1,09    293,25  
    0,16    0,05    0,31    0,39    0,14    0,78    935,00  
    0,19    0,06    0,40    0,62    0,23    1,14    380,00  

例外:

  Caught "std::exception" Exception message is:
  Timed out waiting for Thread to Process
  avr. 06, 2017 11:59:57 PM microarchi_proj.Microarchi_proj main
  GRAVE: null
  ... Matlab M-code Stack Trace ...
  com.mathworks.toolbox.javabuilder.MWException: Timed out waiting for Thread to Process
    at com.mathworks.toolbox.javabuilder.internal.MWMCR.mclFeval(Native Method)
    at com.mathworks.toolbox.javabuilder.internal.MWMCR.access$600(MWMCR.java:31)
    at com.mathworks.toolbox.javabuilder.internal.MWMCR$6.mclFeval(MWMCR.java:861)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.mathworks.toolbox.javabuilder.internal.MWMCR$5.invoke(MWMCR.java:759)
    at com.sun.proxy.$Proxy0.mclFeval(Unknown Source)
    at com.mathworks.toolbox.javabuilder.internal.MWMCR.invoke(MWMCR.java:427)
    at ACPFunction.acpClass.ACP(acpClass.java:210)
    at microarchi_proj.Microarchi_proj.main(Microarchi_proj.java:1145)

1 个答案:

答案 0 :(得分:0)

<强>编辑:

提供数据后,代码已经过编辑以适应数据格式化。

编辑后的代码是:

function [ COEFF,SCORE,latent] = ACP(path)
%% Reading file as a string
Data = fileread(path);

%% Converting comma decimal to point decimal values
Data = strrep(Data, ',', '.');

%% writing point decimal values to new file
FID = fopen('comma2pointData.txt', 'w');
fwrite(FID, Data, 'char');
fclose(FID);
% Delete unwanted variables
clear Data FID

%% Reading new file
nData=importdata('comma2pointData.txt','\t');

% determin rows and columns
rows = length(nData);
[~,columns] = size(strsplit(nData{1},'    '));
b = zeros(rows,columns);

% 
for row = 1:rows
line = nData{row};
a = strsplit(line,'    ');
b(row,:)=cellfun(@str2num,a); 
end

% Delete unwanted variables
clear nData a line row rows columns

%% Calling pca function
[COEFF,SCORE,latent] = pca(b);

% Delete unwanted variables
clear b

% End of Function
end

我希望它能解决你的问题。