3

这是我的 Javac 编译语句:

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

  • 编译没有问题。

三个 jar 文件(j3dcorej3dutilsvecmath)是我的程序必不可少的 jar 文件(或者至少根据这个关于 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.jar两者中的第一个文件夹vecmath.jar是“javax”。编译器是否感到困惑?
  5. 如果编译器感到困惑,我如何在我的源代码中引用它时指定在哪里找到确切的类?
4

2 回答 2

4

尝试:

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

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

于 2012-05-31T04:34:43.677 回答
1

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

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

请检查设置类路径

于 2012-05-31T04:34:57.103 回答