2017-08-23 21 views
0

コマンドプロンプトからJavaプログラムを実行する際に問題が発生します。私はDataRecoverと呼ばれるjavaファイルを持って、私はトリプルと呼ばれる2番目のJavaファイルを持っています。今、私がコマンドプロンプトでjavac Triple.javaを実行すると、想定されていることが実行されます。 「スレッドの例外 "メイン" java.lang.NoClassDefFoundErrorが::DataRecover(間違った名前:projectbengの\のDataRecoverコマンドプロンプトからJavaを実行するとエラーが発生する

DataRecover.java:61: error: cannot find symbol
static Triple extractTriples(String str) {
^
symbol: class Triple
location: class DataRecover
DataRecover.java:30: error: cannot find symbol
Triple triples = extractTriples(line);
^
symbol: class Triple
location: class DataRecover

編集:私は含まれていた私は、javacのDataRecover.javaを実行したときしかし、それはこのエラーメッセージが付属しています私は今、javacコマンドを実行することができ、適切なフォルダにそれぞれのCLASSファイルがありますが、今度はコマンドプロンプトでDataRecoverファイルを実行する必要があります。 "java DataRecover"を実行すると、次のエラー: "スレッドの例外 "メイン" java.lang.NoClassDefFoundErrorが:DataRecover(間違った名前:projectbengの\のDataRecover)"。

package projectbeng; 
import java.util.Scanner; 
import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.File; 
import java.io.IOException; 
public class DataRecover { 
public static void main(String[] args) throws Exception { 

    //Create a Scanner for the user 
    Scanner sc = new Scanner(System.in); 
    System.out.print("Enter file name to process: "); 
    File fileName = new File(sc.nextLine() + ".txt"); //Do not include the .txt extension 

    if(!fileName.exists()){ //does not exist 
     throw new IOException("File \"" + fileName + "\" not found."); 
    } 

    System.out.println("\nProcessing file: " + fileName + "\n----------------------------------------"); 
    BufferedReader br = new BufferedReader(new FileReader(fileName)); 
    int lineCount = 0; //assumes file does not end with a new line character 
    int tripleLineCount = 0; 
    int tripleCount = 0; 
    String line = ""; 

    //Read data from file 
    while((line = br.readLine()) != null){ //has another line in the file 
     lineCount++; 
     if(!line.equals("")) { //is not a blank line 
      Triple triples = extractTriples(line); 
      if(triples.getHasTriple()) { //line contains triples 
       System.out.println(triples.getTriples()); 
       tripleLineCount++; 
      } 
      for(int j = 0; j < triples.getTriples().length(); j++) { 
       if(triples.getTriples().charAt(j) == '(') tripleCount++; 
      } 
     } 
    } 

    //prints out the summary of the file 
    System.out.println("\nSummary\n----------------------------------------"); 
    System.out.println("Total lines:    " + lineCount); 
    System.out.println("Lines containing triples: " + tripleLineCount); 
    System.out.println("Total number of triples: " + tripleCount); 
} 

/*Given a string, returns a Triple with a string containing the triples (if any) and a boolean stating whether 
or not it contains a triple. 

Assumptions: 
1.) If a '-' sign is found, it has been added. If preceeding a number (for example -32), the number is 32 where 
    the '-' sign is simply garbage. 
2.) If a '.' is found in a number (for example 2.32), the potential integers are 2 and 32 where the '.' is 
    garbage. 
3.) For part c, if the first valid character found is a letter, this will always be the real triple. It does not 
    matter whether or not it is part of a word (for example, if it comes across "Dog a", 'D' will be the triple.) 
4.) The strings "<null>", "<cr>", "<lf>", and "<eof>" as well as multi-digit numbers (ex. 32) count as single 
    characters. Thus, they cannot be broken up (no garbage in between the characters). 
*/ 
static Triple extractTriples(String str) {  
    /*Grammar: 
    Triple is in form (a,b,c) where a is either a non-negative integer or the string "<null>", b is a 
     non-negative integer where b <= a (b must be 0 if a is <null>), and c is either an individual letter 
     (upper or lower case), period, colon, semicolon, or one of the three strings "<cr>", "<lf>", or "<eof>". 
    state == 0 ==> needs left parenthesis 
    state == 1 ==> needs right parenthesis 
    state == 2 ==> needs comma 
    state == 3 ==> needs a 
    state == 4 ==> needs b 
    state == 5 ==> needs c 
    */ 
    int state = 0; 
    int a = -1; 
    int b = -1; 
    String triples = ""; 
    String tempTriples = ""; 

    for(int i = 0; i < str.length(); i++) { 
     if(str.charAt(i) == '.' || str.charAt(i) == ':' || str.charAt(i) == ';' || str.charAt(i) == '<' || 
       (str.charAt(i) >= 'a' && str.charAt(i) <= 'z') || (str.charAt(i) >= 'A' && str.charAt(i) <= 'Z') 
       || (str.charAt(i) >= '0' && str.charAt(i) <= '9') || str.charAt(i) == ',' || 
       str.charAt(i) == '(' || str.charAt(i) == ')') { 
      if(state == 0) { 
       if(str.charAt(i) == '(') { 
        tempTriples = str.substring(i, i+1); 
        state = 3; 
       } 
      }else if(state == 1) { 
       if(str.charAt(i) == ')') { 
        triples = triples + tempTriples + str.substring(i, i+1) + " "; 
        tempTriples = ""; 
        state = 0; 
        a = -1; 
        b = -1; 
       } 
      }else if(state == 2) { 
       if(str.charAt(i) == ',') { 
        tempTriples = tempTriples + str.substring(i, i+1); 
        if(b != -1) state = 5; 
        else state = 4; 
       } 
      }else if(state == 3) { 
       if(str.charAt(i) >= '0' && str.charAt(i) <= '9') { 
        int j = i; 
        while(j < str.length() && str.charAt(j) >= '0' && str.charAt(j) <= '9') j++; 
        a = Integer.parseInt(str.substring(i, j)); 
        i = j - 1; 
        tempTriples = tempTriples + a; 
        state = 2; 
       }else if(str.length() > i + 5 && str.substring(i, i+6).equals("<null>")) { 
        a = 0; 
        tempTriples = tempTriples + str.substring(i, str.indexOf(">", i)+1); 
        i = str.indexOf(">", i); 
        state = 2; 
       } 
      }else if(state == 4) { 
       if(str.charAt(i) >= '0' && str.charAt(i) <= '9') { 
        int j = i; 
        while(j < str.length() && str.charAt(j) >= '0' && str.charAt(j) <= '9') j++; 
        b = Integer.parseInt(str.substring(i, j)); 
        i = j - 1; 
        if(b <= a) { 
         tempTriples = tempTriples + b; 
         state = 2; 
        }else b = -1; 
       } 
      }else if(state == 5) { 
       if(str.charAt(i) == '.' || str.charAt(i) == ':'||(str.charAt(i) <= 'z' && str.charAt(i) >= 'a') 
         || str.charAt(i) == ';' || (str.charAt(i) <= 'Z' && str.charAt(i) >= 'A')) { 
        tempTriples = tempTriples + str.substring(i, i+1); 
        state = 1; 
       }else if((str.length() > i + 4 && str.substring(i, i+5).equals("<eof>")) || 
         (str.length() > i + 3 && (str.substring(i, i+4).equals("<cr>") || 
         str.substring(i, i+4).equals("<lf>")))) { 
        tempTriples = tempTriples + str.substring(i, str.indexOf(">", i)+1); 
        i = str.indexOf(">", i); 
        state = 1; 
       }else if(str.length() > i + 5 && str.substring(i, i+6).equals("<null>")) { 
        i = str.indexOf(">", i); 
       } 
      } 
     } 
    } 
    Triple triple = new Triple(true, triples); 
    if(triples.equals("")) triple.setHasTriple(false); //does not contain a triple 
    return triple; 
} 

package projectbeng; 
 
class Triple { 
 
    boolean hasTriple = this.hasTriple; 
 
    String triple = this.triple; 
 
    
 
    //creates a new Triple 
 
    Triple(boolean newHasTriple, String newTriple){ 
 
     this.hasTriple = newHasTriple; 
 
     this.triple = newTriple; 
 
    } 
 
    //returns whether or not Triple contains any triples 
 
    boolean getHasTriple() { 
 
     return hasTriple; 
 
    } 
 
    
 
    //returns the triples in Triple 
 
    String getTriples() { 
 
     return triple; 
 
    } 
 
    
 
    //changes the state of whether a Triple contains triples 
 
    void setHasTriple(boolean newHasTriple){ 
 
     this.hasTriple = newHasTriple; 
 
    } 
 
}

コマンドプロンプトを通じてDataRecoverファイルを実行するための適切な方法は何ですか?

+0

コードをさらに投稿してください。ファイル内のコードの構造を確認する必要があります。 – Blorgbeard

+0

@Blorgbear私は現在の問題について説明しただけでなく、コードを追加しました。 –

答えて

1

他のファイルでソースファイルを参照している場合は、それらのファイルをすべて一緒に指定する必要があります。あなたのケースでは、それは次のようになります。

javac Triple.java DataRecover.java 

現代の多くのJavaプロジェクトのソース・ファイルの管理を支援するためにビルドツールを使用しています。 2つの一般的なJavaビルドツールは、GradleとMavenです。

+0

ありがとうございます。それが私の問題を解決しました。しかし、私はもう一つ持っています。 DataRecoverとTripleの両方のCLASSファイルがフォルダにありますが、コマンドプロンプトで "java DataRecover"を実行すると "スレッドのメイン" java.lang.NoClassDefFoundError:DataRecover(間違った名前:projectbeng \ DataRecover "私は他の何かが欠けているようだ。 –

関連する問題