0

よくわかりません。3Dキューブを作成するための次のコードを次に示します。

import javax.media.j3d.*;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.universe.*;
import javax.vecmath.*;
import javax.swing.*;
import java.awt.event.*;

public class pject extends JFrame {
private Canvas3D canvas;
private SimpleUniverse uni;
private BranchGroup scene;


public pject() {
    this.setSize(600,400);
    this.addKeyListener(new KeyHandler());
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setVisible(true);
    canvas = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
    this.add(canvas);

    uni = new SimpleUniverse(canvas);
    scene = new BranchGroup();
    start();
}
private void start() {
    ColorCube cc = new ColorCube(0.1d);
    scene.addChild(cc);
    Transform3D lookAt = new Transform3D();
    lookAt.lookAt(new Point3d(0.0, 0.0, 1.0), new Point3d(0.0, 0.0, 0.0), new Vector3d(0.0, 1.0, 0));
    lookAt.invert();
    uni.getViewingPlatform().getViewPlatformTransform().setTransform(lookAt);
    uni.addBranchGraph(scene);



}



public static void main(String[] args) {
    pject frame = new pject();
}

float x = 0.4f;     
private class KeyHandler extends KeyAdapter {
    public void keyPressed(KeyEvent e) {                       
        if (e.getKeyCode() == KeyEvent.VK_LEFT) x += 0.001;   

        Transform3D lookAtx = new Transform3D();
        lookAtx.lookAt(new Point3d(x, 0.0, 1.0), new Point3d(x, 0.0, 0.0), new Vector3d(0.0, 1.0, 0));
        lookAtx.invert();
        uni.getViewingPlatform().getViewPlatformTransform().setTransform(lookAtx);

    }
    public void keyReleased(KeyEvent e) {
    }     
}

 } 

それは動作しますが、時々。私はそれをコンパイルします、それは動作します。私はまったく変更を加えず、コンパイルしましたが、機能しません。次に、それらのコンパイルの1つが実際に機能するまで、10〜20回コンパイルする必要があります。

動作しない場合は、Canvas3DがないJFrameが表示されます(または、ある場合は表示されません)。

これは私には意味がありません。なぜ私のコードはたまにしか正しくコンパイルされないのですか?それを何度も何度もコンパイルすると、最終的に私のキューブが表示されるのはなぜですか?

4

1 に答える 1

0

this.setVisible(true);を呼び出します。コンストラクターの最後に。

于 2012-10-29T00:16:12.197 に答える