Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
即使在同一目录中的所有类之后,线程中也会出现异常;“主要”;java.lang.NoClassDefFoundError:EightPuzzle错误名称_Java - Fatal编程技术网

即使在同一目录中的所有类之后,线程中也会出现异常;“主要”;java.lang.NoClassDefFoundError:EightPuzzle错误名称

即使在同一目录中的所有类之后,线程中也会出现异常;“主要”;java.lang.NoClassDefFoundError:EightPuzzle错误名称,java,Java,我正在尝试运行一个类,它将使用两个类,它们位于相同的包和目录中,如下所示:我使用的是JDK1.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;

我正在尝试运行一个类,它将使用两个类,它们位于相同的包和目录中,如下所示:我使用的是JDK1.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)
我不知道为什么会这样,这是我的家

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
文件本身

注意-这假设
EightPuzzle.class
文件位于运行
java
命令的
cs/ai/assignment1
目录中

nb-Java假定如果文件具有
减速,则该文件将驻留在与
减速相同的目录结构中

C700-Notebook-PC:~/aiAssgnmt$ java EightPuzzle.java
这不是您想要做的。您正在向JVM发送java源文件。您想要发送类文件:

java EightPuzzle

并不是说您没有指定
.class
部分

也检查类路径

问题-java.lang.NoClassDefFoundError

根本原因:环境变量部分中设置的Java路径不正确

解决方案:设置正确的JAVA\u主路径

步骤->环境变量设置(我的公司右键单击->属性->环境变量->高级选项卡->变量)

创建新的JAVA_HOME环境变量

JAVA\u HOME;;C:\Program Files(x86)\JAVA\jdk1.6.0\u 14

在路径变量部分设置JAVA_HOME变量

路径%JAVA\u HOME%\bin

在CLASSPATH变量中设置JAVA_HOME变量

类路径%JAVA\u HOME%\jre\lib

重启系统

验证所有变量

回显%CLASSPATH%

回显%JAVA\u HOME%

回显%路径%

编译并运行程序


附加-类H2在不同的包中吗?然后我想你应该检查你的编译方法

我使用的是UBuntu12.04。编译完三个类后,我移到包的顶部,并使用FQN执行了EightPuzzle类。但是,为了避免每次都给出FQN,可以将类路径设置为package(在本例中“set classpath=$classpath:cs/ai/assignment1”)会起作用吗?H2类在同一个包中的什么地方?我想编译方法应该不同,