看源代码import java.applet.Applet;
import java.awt.BorderLayout;import javax.media.j3d.*;
import javax.vecmath.*;import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.geometry.Cone;
import com.sun.j3d.utils.universe.*;public class mycone extends Applet { public BranchGroup createSceneGraph() {
BranchGroup objRoot = new BranchGroup();// 创建一个数据结果来包含一个对象
TransformGroup objTrans = new TransformGroup();// 生成坐标系
objRoot.addChild(objTrans);// 将坐标系添加到根节点
BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0),
100.0);// 设置场景的有效范围
Color3f bgColor = new Color3f(0.0f, 0.0f, 0.0f);// 设置背景颜色
Background bg = new Background(bgColor);
bg.setApplicationBounds(bounds);
objRoot.addChild(bg);// 添加背景到场景中
// 添加平行光
Color3f directionColor = new Color3f(1.f, 1.f, 1.f);
Vector3f vec = new Vector3f(0.f, 0.f, -1.0f);
DirectionalLight directionLight = new DirectionalLight(directionColor,
vec);
directionLight.setInfluencingBounds(bounds);
objRoot.addChild(directionLight);
// 设置外观
Appearance app = new Appearance();
Material material = new Material();
material.setDiffuseColor(new Color3f(1.0f, 1.0f, 0.0f));
app.setMaterial(material);
// 生成基本的圆锥体
Cone cone = new Cone(0.5f, 1.0f, 1, app);
// 添加到场景中
objRoot.addChild(cone); return objRoot; } public mycone() {
setLayout(new BorderLayout());
Canvas3D c = new Canvas3D(null);//【问题所在】系统总说这里没有初始化
add("Center",c);
BranchGroup scene = createSceneGraph();
scene.compile();
SimpleUniverse u = new SimpleUniverse(c);
u.getViewingPlatform().setNominalViewingTransform();
u.addBranchGraph(scene);
} public static void main(String[] args) {
new MainFrame(new mycone(), 500, 500); }}初级入门者~
请大家帮忙给个意见!

解决方案 »

  1.   


    Canvas3D c = new Canvas3D(null);//【问题所在】系统总说这里没有初始化
    没用过java3D,所以不了解这里应该是传一个什么对象,但是这里应该是需要传一个特定的对象在初始化Canvas3D对象。直接传null虽然不会出语法错误,但是下面的逻辑无法继续。建议lz仔细看看j3d的api,看看这里需要传什么对象。
      

  2.   

    问题解决啦~解决办法:
      
      加入包:import java.awt.GraphicsConfiguration;
      
      在setLayout(new BorderLayout());之后插入:
      
      GraphicsConfiguration config=SimpleUniverse.getPreferredConfiguration();
      
      Canvas3D c=new Canvas3D(null);改为:Canvas3D c=new Canvas3D(config);谢谢大家的回答