#java #eclipse #awt #java-3d
#java #eclipse #awt #java-3d
Вопрос:
Я пытаюсь запустить следующий пример кода Java 3D. Я имею в виду 3 jar и 1 папку dll. Их имена следующие :-
- vecmath.jar
- j3d-core-1.3.1.jar
- j3dutils.jar
- j3dcore-ogl.dll (Я также попытался сослаться на jar-файл вместо этого dll-файла. Файл jar j3dcore-d3d_dll.jar ).
Я также попытался поместить их в папки bin и lib jdk и jre.
Я также добавил путь к этому j3dcore-ogl.dll файл в системной переменной окружения с именем «Path». Позже я попытался заменить его путем 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);
}
}
Когда я выполняю это, я получаю следующую трассировку стека исключений :-
Исключение в потоке «main» java.lang.UnsatisfiedLinkError: нет J3D в java.library.path в java.lang.ClassLoader.LoadLibrary(неизвестный источник) в java.lang.Runtime.loadLibrary0(неизвестный источник) в java.lang.System.LoadLibrary(неизвестный источник) в javax.media.j3d.MasterControl $ 22.run(MasterControl.java:889) в java.security.AccessController.Допривилегирован (собственный метод) в javax.media.j3d.MasterControl.LoadLibrary(MasterControl.java:886) в javax.media.j3d.VirtualUniverse.(VirtualUniverse.java:229) при InteractiveAnimation.(InteractiveAnimation.java:84) в InteractiveAnimation.main(InteractiveAnimation.java:143)
Что я должен сделать, чтобы запустить эту программу?
Комментарии:
1. Вы правильно установили Java3D? То есть, есть ли
Program FilesJavaJava3D1.5.1
каталог?bin
Подкаталог там должен содержать 4 DLL-файла…2. Вы можете ответить на свой собственный вопрос. Возможно, это будет полезно для других, если это было что-то особенное, что еще не описано в других ответах.
3. На самом деле, я просто установил Java 3D, вместо того, чтобы использовать и управлять jar и DLL. Сработало для меня.
4. @Marco13 Самой последней версией Java 3D является версия 1.6 до 11 (в сентябре 2014 года). Java 3D 1.5.1 устарела.
5. @gouessej Номер версии здесь не так важен, потому что вопрос касался «любой» версии Java3D до jogamp (и, очевидно, все они «устарели»). Хотя приятно видеть усилия по возрождению Java3D, сообщения на форуме не звучат так, как будто в команде jogamp есть реальная приверженность поддержанию Java3D, или есть? (Нет общедоступных ссылок, говорящих о Java3D в jogamp.org — и oracle.com/technetwork/java/javase/tech/index-jsp-138252.html или java3d.java.net также не содержит информации …). На самом деле, нашел Java3D неплохо, поэтому хотел бы увидеть здесь коммит
Ответ №1:
Приведенные выше комментарии совершенно неверны. Java 3D 1.3.1 полностью устарела, и больше нет необходимости вручную обрабатывать библиотеки DLL в самой последней версии Java 3D (1.6). Я объясняю, как его установить здесь .
Ответ №2:
Установите Java 3D (последнюю версию), а не размещайте банки.
Комментарии:
1. Извините, но ваш комментарий недостаточно точен и немного вводит в заблуждение. Что вы подразумеваете под «Установкой Java 3D»? Механизм расширения устарел в Java 1.9 и будет удален позже, нет способа «установить» библиотеку Java.