use*_*111 11 java import matlab jar package
我有一个让我疯狂的问题.Matlab只看到我的一些类嵌入在JAR文件中
如果我在一个包之外编译类并使用javaaddpath在Matlab中添加该类的路径,我没有遇到任何问题
当我在一个包中编译该类然后尝试在Matlab下访问它时,我遇到了问题.下面是一些Matlab代码
>>javaaddpath('/Users/me/Documents/workspace/EKGTest.jar');
>>clear java
>>import com.neurosky.thinkgear.*
>>methods('EkgSense')
Methods for class com.neurosky.thinkgear.EkgSense:
EkgSense getClass notify reset
addTemplate getClassificationResults notifyAll toString
equals hashCode processData wait
>>methods('EkgEpoch')
No methods for class EkgEpoch or no class EkgEpoch
Run Code Online (Sandbox Code Playgroud)
现在,我查看包中,所有类都是公开的.这是结果jar -tf
osx:/Users/me/Documents/workspace> jar tf EKGTest.jar
META-INF/MANIFEST.MF
META-INF/REFACTORINGS.XML
com/
com/neurosky/
com/neurosky/thinkgear/
com/neurosky/thinkgear/EkgEpoch.class
com/neurosky/thinkgear/EkgEpoch.java
com/neurosky/thinkgear/EkgParameters.class
com/neurosky/thinkgear/EkgParameters.java
com/neurosky/thinkgear/EkgTemplate.class
com/neurosky/thinkgear/EkgTemplate.java
com/neurosky/thinkgear/Matlab.class
com/neurosky/thinkgear/Matlab.java
com/neurosky/thinkgear/EkgSense.class
com/neurosky/thinkgear/EkgSense.java
com/neurosky/thinkgear/DistanceArray.class
com/neurosky/thinkgear/DistanceArray.java
Run Code Online (Sandbox Code Playgroud)
以下 javap --classpath
osx:/Users/me/Documents/workspace> javap -classpath /Users/me/Documents/workspace/EKGTest.jar com.neurosky.thinkgear.EkgEpoch
Compiled from "EkgEpoch.java"
public class com.neurosky.thinkgear.EkgEpoch extends java.lang.Object implements java.lang.Cloneable{
public int numberOfSamples;
public float[] data;
public com.neurosky.thinkgear.EkgEpoch(int);
public com.neurosky.thinkgear.EkgEpoch(int, float[]);
public com.neurosky.thinkgear.EkgEpoch(float[]);
public com.neurosky.thinkgear.EkgEpoch(com.neurosky.thinkgear.EkgEpoch);
public com.neurosky.thinkgear.EkgEpoch(org.json.JSONArray);
public org.json.JSONArray toJSONArray();
public static float[] convolve(float[], float[]);
public float getLineNoiseAmplitude();
public com.neurosky.thinkgear.EkgEpoch subtract(com.neurosky.thinkgear.EkgEpoch);
public com.neurosky.thinkgear.EkgEpoch subEpoch(int, int);
public com.neurosky.thinkgear.EkgEpoch square();
public com.neurosky.thinkgear.EkgEpoch subtract(float);
public com.neurosky.thinkgear.EkgEpoch diff();
public boolean exceedValue(float, int, int);
public com.neurosky.thinkgear.EkgEpoch smooth(int);
public float mean();
public float sum();
public float max();
public float median();
public com.neurosky.thinkgear.EkgEpoch clone();
public com.neurosky.thinkgear.EkgEpoch sort();
public int[] sortIndices(com.neurosky.thinkgear.EkgEpoch);
public float std();
public int find_heart_beats(int[], float);
public com.neurosky.thinkgear.EkgEpoch detrend();
public java.lang.Object clone() throws java.lang.CloneNotSupportedException;
}
osx:/Users/me/Documents/workspace> javap -classpath /Users/me/Documents/workspace/EKGTest.jar com.neurosky.thinkgear.EkgSense
Compiled from "EkgSense.java"
public class com.neurosky.thinkgear.EkgSense extends java.lang.Object{
public com.neurosky.thinkgear.EkgParameters params;
public com.neurosky.thinkgear.EkgTemplate[] templates;
public com.neurosky.thinkgear.EkgTemplate currentData;
public int lastTemplateInd;
public float lastEpochValue;
public com.neurosky.thinkgear.EkgSense(com.neurosky.thinkgear.EkgParameters);
public void reset();
public void addTemplate(java.lang.String, float[][]);
public void addTemplate(com.neurosky.thinkgear.EkgTemplate);
public java.lang.String getClassificationResults();
public boolean processData(float[]);
}
Run Code Online (Sandbox Code Playgroud)
我在OSX上运行Matlab.我尝试过使用Matlab 7.7.0.471(R2008b)和7.11.0.584(R2010b)并遇到同样的问题.两个Matlab都使用本机OSX Java(Java 1.6.0_26-b03-384-10M3425与Apple Inc. Java HotSpot(TM)64位服务器VM混合模式),它应该与Eclipse中的相同(我已经检查过)和Eclipse编译1.6).
请记住,当我删除package语句并在java文件的顶部(当然在所有类中)导入一些导入时,我可以看到缺少的类没有问题,当我只是添加.class文件的路径时(不能访问它们)在JAR文件中).
任何帮助将不胜感激.谢谢,
贾森
use*_*111 17
我最终发现了上面无法看到的问题.问题(没有在任何地方记录)是我的一些类使用我没有导入到Matlab的外部包.我没有计划使用与这些软件包相关的任何功能.
尽管如此,它找不到类的Matlab错误信息令人费解.指示由于某些包未被引用而无法使用该类的错误消息将是最有用的.
如果您的包使用外部包,请确保在java类路径中包含所有相关的jar文件,否则Matlab将看不到您的依赖类.
我发现另一个有用的提示是,如果输入一个不存在的包,Matlab函数"import"将不会返回错误,例如,import java.doesnotexist.*工作正常.但是,import java.doesnotexist.aclass不会起作用.
贾森
| 归档时间: |
|
| 查看次数: |
7667 次 |
| 最近记录: |