Я все еще пытаюсь изучить Java и решил сделать еще один шаг вперед и попытаться использовать внешние файлы классов для хранения структур данных (например, файлов заголовков в C). Я продолжаю сталкиваться с NoClassDefFoundError и хотел бы получить некоторые методы или приемы, которые могут показать мне, что идет не так (и где), поскольку сообщение мне не очень понятно: (
Моя структура каталогов настроена следующим образом:
tarskin@5-PARA-11-0120:~/programming/Java/FindGlycopeps$ ls
Default.mzML FindGlycopeps.class FindGlycopeps.java glycoproteomics
tarskin@5-PARA-11-0120:~/programming/Java/FindGlycopeps$ ls glycoproteomics/
Spectrum.class Spectrum.java
Основная программа кодируется следующим образом:
package glycoproteomics;
import java.util.*;
import java.util.regex.*;
import java.io.*;
import java.lang.*;
public class FindGlycopeps {
public static LinkedList outside_tag_reader (String filename, String tag) {
LinkedList<String> someList = new LinkedList<String>();
DataInputStream in = null;
try {
FileInputStream input = new FileInputStream(filename);
in = new DataInputStream(input);
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line;
String regexp = "<"+tag+">(.*)</"+tag+">";
Pattern pattern = Pattern.compile(regexp);
while ((line = reader.readLine()) != null) {
Matcher matcher = pattern.matcher(line);
if (matcher.find()) {
String buffer = matcher.group(1);
someList.add(buffer);
}
}
in.close();
} catch (Exception x) {
System.err.println(x);
}
return(someList);
}
public static void main (String [ ] args) {
LinkedList<String> binary = new LinkedList<String>();
ArrayList<Spectrum> spectra = new ArrayList<Spectrum>();
String file = args[0];
if (file != null) {
binary = FindGlycopeps.outside_tag_reader(file,"binary");
int j = 0;
for (int i = 0; i < binary.size(); i++) {
String buffer = binary.get(i);
if (i % 2 == 0) {
spectra.add(j, new Spectrum());
spectra.get(j).mzList.add(buffer);
} else {
spectra.get(j).intList.add(buffer);
}
j++;
}
System.out.println(spectra.get(1).mzList); // purely for testing
} else {
System.out.println("No file was specified");
}
}
}
«Структура данных» кодируется следующим образом:
package glycoproteomics;
import java.util.ArrayList;
public class Spectrum implements Comparable<Spectrum>{
float precursor;
ArrayList<String> mzList;
ArrayList<String> intList;
public int compareTo(Spectrum arg0) {
return 0;
}
}
Я скомпилировал оба файла .java только с помощью javac и пытался запустить основной класс из «корня», используя несколько вариантов java -classpath (также пробовал -cp) ./://Java/FindGlycopeps/glycoproteomics FindGlycopeps и он продолжает выдавать ошибки, такие как:
Exception in thread "main" java.lang.NoClassDefFoundError: FindGlycopeps (wrong name: glycoproteomics/FindGlycopeps)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: FindGlycopeps. Program will exit.
Что было бы хорошим способом выяснить, как все идет не так и что следует изменить в моем «мышлении»? Я был бы признателен за объяснение, почему что-то должно быть сделано вместо «сделай это, чтобы исправить это», если это возможно.
Заранее спасибо