给出java.lang.UnsatisfiedLinkError的Java 3D代码

时间:2014-06-16 18:41:04

标签: java eclipse awt java-3d

我正在尝试运行以下Java 3D示例代码。我指的是3个罐子和1个dll文件夹。他们的名字如下: -

  1. vecmath.jar
  2. J3D核-1.3.1.jar
  3. j3dutils.jar
  4. j3dcore-ogl.dll(我也试过引用一个jar文件而不是这个dll文件.jar文件是j3dcore-d3d_dll.jar)。
  5. 我也尝试将它们放在jdk和jre的bin和lib文件夹中。

    我还在名为" Path"的系统环境变量中添加了该j3dcore-ogl.dll文件的路径。后来我尝试用j3dcore-d3d_dll.jar文件的路径替换它。

    代码如下: -

    import java.applet.Applet;
    import java.awt.BorderLayout;
    import java.awt.Button;
    import java.awt.GraphicsConfiguration;
    import java.awt.Panel;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    
    import javax.media.j3d.AmbientLight;
    import javax.media.j3d.BoundingSphere;
    import javax.media.j3d.BranchGroup;
    import javax.media.j3d.Canvas3D;
    import javax.media.j3d.DirectionalLight;
    import javax.media.j3d.Transform3D;
    import javax.media.j3d.TransformGroup;
    import javax.swing.Timer;
    import javax.vecmath.Color3f;
    import javax.vecmath.Point3d;
    import javax.vecmath.Vector3d;
    import javax.vecmath.Vector3f;
    
    import com.sun.j3d.utils.applet.MainFrame;
    import com.sun.j3d.utils.geometry.Sphere;
    import com.sun.j3d.utils.universe.SimpleUniverse;
    
    public class InteractiveAnimation extends Applet implements ActionListener, KeyListener {
    
        private static final long serialVersionUID = 1L;
    
        private Button go = new Button("Go");
    
      private TransformGroup objTrans;
    
      private Transform3D trans = new Transform3D();
    
      private float height = 0.0f;
    
      private float sign = 1.0f; // going up or down
    
      private Timer timer;
    
      private float xloc = 0.0f;
    
      public BranchGroup createSceneGraph() {
        // Create the root of the branch graph
        BranchGroup objRoot = new BranchGroup();
        objTrans = new TransformGroup();
        objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
        objRoot.addChild(objTrans);
    
        // Create a simple shape leaf node, add it to the scene graph.
        Sphere sphere = new Sphere(0.25f);
        objTrans = new TransformGroup();
        objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
        Transform3D pos1 = new Transform3D();
        pos1.setTranslation(new Vector3f(0.0f, 0.0f, 0.0f));
        objTrans.setTransform(pos1);
        objTrans.addChild(sphere);
        objRoot.addChild(objTrans);
        BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0),
            100.0);
    
        Color3f light1Color = new Color3f(1.0f, 0.0f, 0.2f);
        Vector3f light1Direction = new Vector3f(4.0f, -7.0f, -12.0f);
        DirectionalLight light1 = new DirectionalLight(light1Color,
            light1Direction);
        light1.setInfluencingBounds(bounds);
        objRoot.addChild(light1);
    
        // Set up the ambient light
        Color3f ambientColor = new Color3f(1.0f, 1.0f, 1.0f);
        AmbientLight ambientLightNode = new AmbientLight(ambientColor);
        ambientLightNode.setInfluencingBounds(bounds);
        objRoot.addChild(ambientLightNode);
    
        return objRoot;
      }
    
      public InteractiveAnimation() {
        setLayout(new BorderLayout());
        GraphicsConfiguration config = SimpleUniverse
            .getPreferredConfiguration();
        Canvas3D c = new Canvas3D(config);
        add("Center", c);
        c.addKeyListener(this);
        timer = new Timer(100, this);
        //timer.start();
        Panel p = new Panel();
        p.add(go);
        add("North", p);
        go.addActionListener(this);
        go.addKeyListener(this);
        // Create a simple scene and attach it to the virtual universe
        BranchGroup scene = createSceneGraph();
    
        SimpleUniverse u = new SimpleUniverse(c);
        u.getViewingPlatform().setNominalViewingTransform();
        u.addBranchGraph(scene);
      }
    
      public void keyPressed(KeyEvent e) {
        //Invoked when a key has been pressed.
        if (e.getKeyChar() == 's') {
          xloc = xloc + .1f;
        }
        if (e.getKeyChar() == 'a') {
          xloc = xloc - .1f;
        }
      }
    
      public void keyReleased(KeyEvent e) {
        // Invoked when a key has been released.
      }
    
      public void keyTyped(KeyEvent e) {
        //Invoked when a key has been typed.
      }
    
      public void actionPerformed(ActionEvent e) {
        // start timer when button is pressed
        if (e.getSource() == go) {
          if (!timer.isRunning()) {
            timer.start();
          }
        } else {
          height += .1 * sign;
          if (Math.abs(height * 2) >= 1)
            sign = -1.0f * sign;
          if (height < -0.4f) {
            trans.setScale(new Vector3d(1.0, .8, 1.0));
          } else {
            trans.setScale(new Vector3d(1.0, 1.0, 1.0));
          }
          trans.setTranslation(new Vector3f(xloc, height, 0.0f));
          objTrans.setTransform(trans);
        }
      }
    
      public static void main(String[] args) {
        System.out.println("Program Started");
        InteractiveAnimation bb = new InteractiveAnimation();
        bb.addKeyListener(bb);
        MainFrame mf = new MainFrame(bb, 256, 256);
      }
    }
    

    当我执行此操作时,我得到以下异常堆栈跟踪: -

    线程中的异常&#34; main&#34; java.lang.UnsatisfiedLinkError:java.library.path中没有J3D     at java.lang.ClassLoader.loadLibrary(Unknown Source)     at java.lang.Runtime.loadLibrary0(Unknown Source)     在java.lang.System.loadLibrary(未知来源)     在javax.media.j3d.MasterControl $ 22.run(MasterControl.java:889)     at java.security.AccessController.doPrivileged(Native Method)     在javax.media.j3d.MasterControl.loadLibraries(MasterControl.java:886)     在javax.media.j3d.VirtualUniverse。(VirtualUniverse.java:229)     在InteractiveAnimation。(InteractiveAnimation.java:84)     在InteractiveAnimation.main(InteractiveAnimation.java:143)

    我该怎么做才能运行这个程序?

2 个答案:

答案 0 :(得分:1)

上述评论完全错误。 Java 3D 1.3.1已完全过时,不再需要在最新版本的Java 3D(1.6)中手动处理DLL。我解释了如何安装here

答案 1 :(得分:-1)

安装Java 3D(最新版本),而不是放置罐子。