Ошибка Java3D: Java.Lang.NoClassDefFoundError

Это код в Java 3D:

import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.universe.SimpleUniverse;
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.GraphicsConfiguration;
import javafx.scene.transform.Transform;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.vecmath.Vector3f;

class Esercizio3dot1 extends Applet {

    public Esercizio3dot1() {

        setLayout(new BorderLayout());
        Transform3D t = new Transform3D();
        GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
        Canvas3D canvas = new Canvas3D(config);        
        add("Center", canvas);
        BranchGroup scene = CreateSceneGraph();
        scene.compile();
        SimpleUniverse universe = new SimpleUniverse(canvas);

        universe.getViewingPlatform().setNominalViewingTransform();
        universe.addBranchGraph(scene);

    }

    public BranchGroup CreateSceneGraph() {

        BranchGroup bg = new BranchGroup();
        TransformGroup tg = CreateSubGraph();
        bg.addChild(tg);
        return bg;
    }

    public TransformGroup CreateSubGraph() {

        TransformGroup tg = new TransformGroup();
        tg.addChild(new ColorCube(0.3));
        return tg;

    }

    public static void main(String[] args) {
        System.setProperty("sun.awt.noerasebackground", "true");
        new MainFrame(new Esercizio3dot1(), 300, 300);

    }

}

Код скомпилирован правильно, но при запуске консоли выдает ошибку (изображение), как решить?

ошибка

Установил последнюю версию 3d java но ситуация не изменилась, ошибка отображается одинаково.


person Mark    schedule 15.03.2018    source источник


Ответы (1)


Во-первых, Java3D и JavaFX 3D — это две разные и несовместимые библиотеки, поэтому вам следует удалить import javafx.scene.transform.Transform;.

Во-вторых, нет необходимости «устанавливать» Java3D, это библиотека Java, состоящая из JAR-файлов, и эти JAR-файлы должны быть в вашем пути к классам, как и для большинства сторонних библиотек Java. Советую прочитать мой очень подробный учебник, в нем объясняется, как использовать Java3D 1.6.0 и 1.7.0.

Ваш исходный код совместим с Java3D 1.6.0, но не с Java3D 1.7.0, так как в этой версии пакеты были переименованы, поскольку они не находятся под контролем Oracle (тогда он не может использовать термин "javax").

person gouessej    schedule 15.03.2018
comment
Но если тот же код я делаю в IDE, он работает отлично без сбоев. - person Mark; 15.03.2018
comment
Я удалил импорт javafx.scene.transform.Transform; - person Mark; 15.03.2018
comment
Вы все равно не использовали класс javafx.scene.transform.Transform, импорт был совершенно бесполезен. IDE — это инструмент, который может помочь вам стать более продуктивным, если вы поймете, как он работает. Имейте в виду, что ваша IDE и ваша программа используют разные пути к классам. Ваша IDE строит путь к классам из настроек проекта. Если вы хотите выполнить свою программу за пределами вашей IDE, вы должны правильно установить путь к классам. Возможно, ваша IDE и ваша программа используют разные JRE. Я советую вам прочитать мой учебник и не помещать JAR-файлы в jre/lib/ext. - person gouessej; 16.03.2018
comment
К сожалению, ваша инструкция мне не помогла. Я не понял, как это делается. - person Mark; 17.03.2018
comment
Сначала вам нужно скачать эти JAR-файлы: gouessej.wordpress.com/2012/08/01/ Затем вам нужно запустить свою программу с помощью этой командной строки: gouessej.wordpress.com/2012/08/01/ Пожалуйста, дайте мне знать, что вы пробовали, что не удалось и что сработало. Пожалуйста, будьте точны. Если вы не дадите мне никакой информации, я не смогу вам помочь. Это официальное руководство пользователя Java3D верно. Если это не сработает для вас, вы будете единственным виноватым, так как это точно сработает. - person gouessej; 18.03.2018