Tôi gặp vấn đề khi lái xe cho tôi. Matlab chỉ nhìn thấy một số lớp học của tôi embeded trong một tập tin JARMatlab không thể thấy một số lớp học java của tôi (không phải tất cả) trong gói jar
Nếu tôi biên dịch các lớp bên ngoài của một gói và thêm đường dẫn đến lớp học trong Matlab sử dụng javaaddpath, tôi không gặp phải bất kỳ vấn đề
Khi tôi biên dịch lớp trong một gói và sau đó cố gắng truy cập chúng trong Matlab, tôi có vấn đề. Bên dưới một số mã 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
Bây giờ, tôi tìm trong gói, tất cả các lớp đều được công khai. Đây là một kết quả của 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
và dưới của 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[]);
}
Tôi đang chạy Matlab trên OSX. Tôi đã thử với Matlab 7.7.0.471 (R2008b) và 7.11.0.584 (R2010b) và có cùng một vấn đề. Cả Matlab đang sử dụng Java OSX nguyên gốc (Java 1.6.0_26-b03-384-10M3425 với chế độ hỗn hợp Java HotSpot (TM) 64-Bit Server VM của Apple), nó phải giống như trong Eclipse (tôi đã kiểm tra) và Eclipse biên dịch với 1.6).
Hãy nhớ rằng tôi có thể thấy lớp bị thiếu không có vấn đề khi tôi loại bỏ câu lệnh gói và một số nhập ở đầu tệp java (trong tất cả các lớp học) và khi tôi chỉ cần thêm đường dẫn vào tệp .class (không truy cập chúng trong một tệp JAR).
Mọi trợ giúp sẽ được đánh giá cao. Cảm ơn,
Jason
Nếu bạn đã tìm thấy một giải pháp, đặt nó trong một câu trả lời và chấp nhận nó bản thân bạn. Bằng cách đó, những người khác sẽ tìm thấy nó dễ dàng hơn. –