0

我正在尝试运行一个将使用两个类的类,这两个类位于同一个包和目录中,如下所示:我使用的是 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

请在这方面提供帮助。

4

3 回答 3

0

编译后,您需要移动包路径的顶部(从.java已编译的位置到尝试使用完全限定名称运行类

java cs.ai.assignment1.EightPuzzle

不,您永远不应该为这些提供扩展名,因为 Java 会自行查找相应的.class文件。

nb- 这假定EightPuzzle.class文件位于cs/ai/assignment1您运行java命令的目录中

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

于 2013-10-17T04:40:56.353 回答
0
C700-Notebook-PC:~/aiAssgnmt$ java EightPuzzle.java

这不是你想做的。您正在向 JVM 发送一个 java 源文件。您要发送类文件:

java EightPuzzle

不是你不指定.class零件

于 2013-10-17T04:41:34.670 回答
-1

也检查类路径

问题-java.lang.NoClassDefFoundError

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

解决方案:设置正确的 JAVA_HOME 路径

Steps->Environment Variable Setting(我的Comp-右键->Properties->Env Variable->Advance Tab->Variable)

创建新的 JAVA_HOME 环境变量。

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

在 PATH 变量部分设置 JAVA_HOME 变量。

路径 %JAVA_HOME%\bin

在 CLASSPATH 变量中设置 JAVA_HOME 变量

类路径 %JAVA_HOME%\jre\lib

重启系统

验证所有变量

回声 %CLASSPATH%

回显 %JAVA_HOME%

回显 %PATH%

编译并运行程序

附加 - H2 类是否在不同的包中?那我觉得你应该检查你的编译方法

于 2013-10-17T05:07:35.390 回答