2012-01-11 4 views
1

私はまだJavaを学ぼうとしており、さらに1ステップ進めて外部クラスファイルを使用してデータ構造(Cのヘッダーファイルなど)を格納しようとしました。私はNoClassDefFoundErrorを実行し続けていますが、何がうまくいかないのかを私に示すことができるいくつかの方法やテクニックが好きです(クラスファイルを扱うときにNoClassDefFoundErrorを解決する方法

私のディレクトリ構造は次のように設定されています:

[email protected]:~/programming/Java/FindGlycopeps$ ls 
Default.mzML FindGlycopeps.class FindGlycopeps.java glycoproteomics 
[email protected]:~/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; 
    } 
} 

javacだけの両方の.javaファイルをコンパイルし、java -classpathのいくつかのバリエーションを使用して 'root'からメインクラスを実行しようとしています(-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. 

を?可能であれば、これを修正するために何かをしなければならない理由を説明していただきたいと思います。事前

おかげ

答えて

4

Javaクラスファイルは、パッケージと同じ名前のディレクトリに存在する必要があります。つまり、あなたのクラスパス(とない~/programming/Java/FindGlycopeps/glycoproteomics)及び(代わりに~/programming/Java/FindGlycopepsの)FindGlycopeps.class~/programming/Java/FindGlycopeps/glycoproteomicsでなければなりませんファイル

+0

「メイン」プログラムでもOK、パッケージフォルダに入るに~/programming/Java/FindGlycopepsを追加する必要があります。正しく設定されていない場合、クラスパスはカレントディレクトリなので、パッケージディレクトリ内から 'java FindGlycopeps'と言うだけでプログラムを実行できますか? –

+0

おそらく。率直に言って、私は決して適切なクラスパスなしでJavaを実行しようとはしませんでした。 '-classpath。'または '-classpath"を試してください$ PWD "' –

1

ディレクトリglycoproteomicsにする必要がありますFindGlycopeps.classファイル。パッケージ構造は、ファイルシステム上のディレクトリ構造によって反映されます。

関連する問題