簡體   English   中英

即使在同一目錄中的所有類之后,線程“ main”中的異常java.lang.NoClassDefFoundError:EightPuzzle錯誤的名稱

[英]Even after all classes in same directory Exception in thread “main” java.lang.NoClassDefFoundError: EightPuzzle wrong name

我試圖運行將使用兩類它們是在同一個包和目錄如下:a類:我使用JDK 1.7和JAVA_HOME也設置。

package cs.ai.assignment1;
/* class to be used in EightPuzzle*/
import java.util.*;
public class H1 {
    int solve(int a[][]) {
        return 1;
    }
}


package cs.ai.assignment1;

/* EightPuzzle class to store problem to be solved*/

import java.util.*;
import mtech.cs.ai.assignment1.*;
public class EightPuzzle {

    int tiles[][];

    EightPuzzle() {
        // tiles is initilized to 0 here
    }

    void input() {
        //input is taken from user and stored in tiles
    }

    public static void main(String[] args) {
        int opt = 0;
        Scanner in = new Scanner(System.in);
        EightPuzzle puzzle = new EightPuzzle();
        do {
            System.out.println("**************Welcome to 8Puzzle Game****************\n");
            System.out.println("\nChoose Heuristic Function to use");
            System.out.println("\n1. #Displaced Tiles");
            System.out.println("\n2. Manhattan Distance");
            System.out.println("\nOption: ");
            opt = in.nextInt();
            if (opt == 2 || opt == 1) {
                puzzle.input();
                break;
            }
        } while (true);
        int steps = 0;
        H1 h1 = new H1();
        H2 h2 = new H2();
        switch (opt) {
            case 1:
                steps = h1.solve(puzzle.tiles);
                break;
            case 2:
                steps = h2.solve(puzzle.tiles); // To solve the puzzle
                break;
            default:
                break;
        };
        System.out.println("\n\nThe goal was reached in " + steps + " steps");
    }
}

所有這些類都在同一目錄和包中。 他們也使用過編譯

C700-Notebook-PC:~/aiAssgnmt$ javac -d . EightPuzzle.java H1.java H2.java

但是,當我嘗試運行它們時,出現以下錯誤,

C700-Notebook-PC:~/aiAssgnmt$ java EightPuzzle.java
Error: Could not find or load main class EightPuzzle.java

所以,我試圖把他們都在JDK / bin和編譯的,但后來我得到這個錯誤,

ambarish@ambarish-Compaq-Presario-C700-Notebook-PC:~/Softwares/jdk1.7.0_25/bin$ java EightPuzzle
Exception in thread "main" java.lang.NoClassDefFoundError: EightPuzzle (wrong name: mtech/cs/ai/assignment1/EightPuzzle)
            at java.lang.ClassLoader.defineClass1(Native Method)
            at java.lang.ClassLoader.defineClass(ClassLoader.java:792)
            at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
            at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
            at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
            at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
            at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
            at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

我不知道為什么會這樣,這是我的JAVA_HOME,

C700-Notebook-PC:~/Softwares/jdk1.7.0_25/bin$ echo $JAVA_HOME 
/home/ambarish/Softwares/jdk1.7.0_25

請幫助這方面。

一旦編譯,你需要移動包路徑的頂部(從那里.java使用完全合格的名稱來運行的類都被編譯到一個嘗試

java cs.ai.assignment1.EightPuzzle

不能,您永遠不要為它們提供擴展名,因為Java會查找相應的.class文件本身。

NB-這假定EightPuzzle.class文件是在cs/ai/assignment1目錄從運行中java命令

nb- Java假定如果文件具有package減速,則該文件將與package減速駐留在相同的目錄結構中

C700-Notebook-PC:~/aiAssgnmt$ java EightPuzzle.java

這不是您想要的。 您正在將Java源文件發送到JVM。 您要發送類文件:

java EightPuzzle

不是您沒有指定.class部分

還要檢查類路徑

問題 -java.lang.NoClassDefFoundError

根本原因 :環境變量部分中設置的Java路徑不正確

解決方案 :設置正確的JAVA_HOME路徑

步驟->環境變量設置(我的右擊->屬性->環境變量->高級選項卡->變量)

創建新的JAVA_HOME環境變量。

JAVA_HOME。; C:\\ Program Files(x86)\\ Java \\ jdk1.6.0_14

在“ PATH變量”部分中設置JAVA_HOME變量。

路徑%JAVA_HOME%\\ bin

在CLASSPATH變量中設置JAVA_HOME變量

CLASSPATH%JAVA_HOME%\\ jre \\ lib

重啟系統

驗證所有變量

回聲%CLASSPATH%

回聲%JAVA_HOME%

回聲%PATH%

編譯並運行程序

附加-H2類是否在不同的包裝中? 那我要你檢查一下你的編譯方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM