gpt4 book ai didi

java - Matlab 在 jar 包中看不到我的一些 java 类(不是全部)

转载 作者:搜寻专家 更新时间:2023-10-30 21:23:33 24 4
gpt4 key购买 nike

我遇到了一个让我抓狂的问题。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

现在,我查看包,所有类都是公共(public)的。这是 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

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[]);
}

我在 OSX 上运行 Matlab。我尝试使用 Matlab 7.7.0.471 (R2008b) 和 7.11.0.584 (R2010b) 并遇到了同样的问题。两个 Matlab 都使用 native 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 文件中访问它们)。

如有任何帮助,我们将不胜感激。谢谢,

杰森

最佳答案

终于找到上面看不到的问题了。问题(没有在任何地方记录)是我的一些类使用了我没有导入到 Matlab 中的外部包。我不打算使用与这些包相关的任何功能。

然而,Matlab 找不到类的错误消息令人费解。指示该类无法使用的错误消息是最有用的,因为某些包未被引用。

如果您的包使用外部包,请确保在 java 类路径中包含所有相关的 jar 文件,否则 Matlab 将看不到您的依赖类。

另一个我发现有用的提示是,如果您输入一个不存在的包,Matlab 函数“import”将不会返回错误,例如,import java.doesnotexist.* 工作正常。但是,import java.doesnotexist.aclass 将不起作用。

杰森

关于java - Matlab 在 jar 包中看不到我的一些 java 类(不是全部),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8499890/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com