当我正确导入所述类并在其目录中查看它时,为什么我会收到ClassNotFoundException?

时间:2012-05-31 04:27:42

标签: java classnotfoundexception java-3d

这是我的Javac编译声明:

  

javac -cp   “C:\的java \代码\ J3D \ j3dcore.jar; C:\的java \代码\ J3D \ j3dutils.jar; C:\的java \代码\ J3D \ vecmath.jar”   Simple.java

  • 编译没有任何问题。

三个jar文件(j3dcorej3dutilsvecmath)是我的程序必不可少的jar(或者至少我被引导相信this official tutorial on J3D

对于记录,我将这段代码从上面的pdf文件中删除了几行。

  • jar文件正确位于引用位置

当我运行Simple计划时,(java Simple)我受到了欢迎

  

线程“main”中的异常java.lang.NoClassDefFoundError:   javax / media / j3d / Cavas3d引起: java.lang.ClassNotFoundExpection:   javax.media.j3d.Canvas3D

目前,我直接盯着位于Canvas3D.class

内的j3dcore.jar\javax\media\j3d\

wtfisthis.jpg

以下是源代码:

//First java3D Program
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.event.*;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.geometry.ColorCube;
import javax.media.j3d.*;
import javax.vecmath.*;
import java.awt.GraphicsConfiguration;

public class Simple extends Applet {
    public Simple() {
        setLayout(new BorderLayout());
        GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
        Canvas3D canvas3D = new Canvas3D(config);
        add("Center", canvas3D);

        BranchGroup scene = createSceneGraph();
        scene.compile();

        // SimpleUniverse is a Convenience Utility class
        SimpleUniverse simpleU = new SimpleUniverse(canvas3D);

        // This moves the ViewPlatform back a bit so the
        // objects in the scene can be viewed.
        simpleU.getViewingPlatform().setNominalViewingTransform();

        simpleU.addBranchGraph(scene);
    }   // end of HelloJava3Da (constructor)
    public BranchGroup createSceneGraph() {
        // Create the root of the branch graph
        BranchGroup objRoot = new BranchGroup();

        // Create a simple shape leaf node, add it to the scene graph.
        // ColorCube is a Convenience Utility class
        objRoot.addChild(new ColorCube(0.4));

        return objRoot;
    }
    public static void main(String args[]){
        Simple world = new Simple();
    }
}
  1. 我是否正确导入?
  2. 我在Javac声明中错误地引用了我的jar文件吗?
  3. 如果我在正确的目录中清楚地看到Canvas3D,为什么java无法找到它?
  4. j3dcore.jarvecmath.jar中的第一个文件夹是“javax”。编译器是否会混淆?
  5. 如果编译器感到困惑,如何在引用它时指定在哪里找到确切的类 在我的源代码中?

2 个答案:

答案 0 :(得分:4)

尝试:

java -cp "C:\java\code\j3D\j3dcore.jar;C:\java\code\j3D\j3dutils.jar;C:\java\code\j3D\vecmath.jar"  Simple

您还需要在java命令行中包含类路径。

答案 1 :(得分:1)

只是做java simple不会有帮助。在运行程序时,需要将所有这些jar放在类路径中。就像你编译它一样。

java -cp C:\java\code\j3D\j3dcore.jar;C:\java\code\j3D\j3dutils.jar;C:\java\code\j3D\vecmath.jar Simple

请检查Setting the class path