简体   繁体   English

即使在同一目录中的所有类之后,线程“ main”中的异常java.lang.NoClassDefFoundError:EightPuzzle错误的名称

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

I am trying to run a class that is going to use two classes which are in the same package and directory as follows: I am using jdk 1.7 and JAVA_HOME is also set. 我试图运行将使用两类它们是在同一个包和目录如下: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");
    }
}

All these classes are in the same directory and package. 所有这些类都在同一目录和包中。 They got compiled too using, 他们也使用过编译

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

But, when I am trying to run them I am getting following error, 但是,当我尝试运行它们时,出现以下错误,

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

So, I tried putting them all in jdk/bin and the compiled, but then I got this error, 所以,我试图把他们都在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)

I dont know why is it happening, this is my JAVA_HOME, 我不知道为什么会这样,这是我的JAVA_HOME,

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

Please help in this regard. 请帮助这方面。

Once compiled, you need to move top of the package path (from where the .java have being compiled to an try using the fully qualified name to run the class 一旦编译,你需要移动包路径的顶部(从那里.java使用完全合格的名称来运行的类都被编译到一个尝试

java cs.ai.assignment1.EightPuzzle

Not, you should never provide an extension for these as Java will look up the corresponding .class file itself. 不能,您永远不要为它们提供扩展名,因为Java会查找相应的.class文件本身。

nb- This assumes that the EightPuzzle.class file is in the cs/ai/assignment1 directory from where you run the java command NB-这假定EightPuzzle.class文件是在cs/ai/assignment1目录从运行中java命令

nb- Java assumes that if the file has a package deceleration that the file will reside within the same directory structure as the package deceleration nb- Java假定如果文件具有package减速,则该文件将与package减速驻留在相同的目录结构中

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

This isn't what you want to do. 这不是您想要的。 You're sending a java source file to the JVM. 您正在将Java源文件发送到JVM。 You want to send the class file: 您要发送类文件:

java EightPuzzle

Not that you do not specify the .class part 不是您没有指定.class部分

Check the classpath too 还要检查类路径

Issue -java.lang.NoClassDefFoundError 问题 -java.lang.NoClassDefFoundError

Root Cause : Incorrect Java path set in Environment Variable Section 根本原因 :环境变量部分中设置的Java路径不正确

Solution : Set correct JAVA_HOME Path 解决方案 :设置正确的JAVA_HOME路径

Steps->Environment Variable Setting (My Comp-Right Click ->Properties->Env Variable->Advance Tab ->Variable) 步骤->环境变量设置(我的右击->属性->环境变量->高级选项卡->变量)

Create new JAVA_HOME Environment Variable. 创建新的JAVA_HOME环境变量。

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

Set JAVA_HOME variable in PATH Variable section. 在“ PATH变量”部分中设置JAVA_HOME变量。

PATH %JAVA_HOME%\\bin 路径%JAVA_HOME%\\ bin

Set JAVA_HOME variable in CLASSPATH Variable 在CLASSPATH变量中设置JAVA_HOME变量

CLASSPATH %JAVA_HOME%\\jre\\lib CLASSPATH%JAVA_HOME%\\ jre \\ lib

Restart System 重启系统

Verify all variable 验证所有变量

echo %CLASSPATH% 回声%CLASSPATH%

echo %JAVA_HOME% 回声%JAVA_HOME%

echo %PATH% 回声%PATH%

Compile & Run the program 编译并运行程序

Additional- Does class H2 in different package ?? 附加-H2类是否在不同的包装中? then i thing you should check your compiling method 那我要你检查一下你的编译方法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 线程“main”中的异常 java.lang.NoClassDefFoundError: (错误名称 - Exception in thread “main” java.lang.NoClassDefFoundError: (wrong name 线程“ main”中的异常java.lang.NoClassDefFoundError:错误的名称 - Exception in thread “main” java.lang.NoClassDefFoundError: wrong name 线程“main”中的异常java.lang.NoClassDefFoundError:名称错误 - Exception in thread “main” java.lang.NoClassDefFoundError: wrong name 线程“main”中的异常java.lang.NoClassDefFoundError:名称错误: - Exception in thread “main” java.lang.NoClassDefFoundError: wrong name: 我的代码有什么问题?线程“ main”中的异常java.lang.NoClassDefFoundError:song(错误的名称:Song) - What is wrong with my code?Exception in thread “main” java.lang.NoClassDefFoundError: song (wrong name: Song) Hadoop Java 错误:线程“main”中的异常 java.lang.NoClassDefFoundError: WordCount(错误名称:org/myorg/WordCount) - Hadoop Java Error : Exception in thread “main” java.lang.NoClassDefFoundError: WordCount (wrong name: org/myorg/WordCount) 线程“main”中的异常java.lang.NoClassDefFoundError:DiServer <wrong name: ds/DiServer> - Exception in thread “main” java.lang.NoClassDefFoundError: DiServer <wrong name: ds/DiServer> 线程“main”中的异常java.lang.NoClassDefFoundError:解决方案(错误名称:解决方案) - Exception in thread “main” java.lang.NoClassDefFoundError: Solution (wrong name: solution) 线程“ main”中的异常java.lang.NoClassDefFoundError:错误的名称(类似的帖子无济于事) - Exception in thread “main” java.lang.NoClassDefFoundError: wrong name (similar posts not helping) 线程“ main”中的异常java.lang.NoClassDefFoundError:计算器(错误名称:apackage / calculator) - Exception in thread “main” java.lang.NoClassDefFoundError: calculator (wrong name: apackage/calculator)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM