よくわかりません。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が表示されます(または、ある場合は表示されません)。
これは私には意味がありません。なぜ私のコードはたまにしか正しくコンパイルされないのですか?それを何度も何度もコンパイルすると、最終的に私のキューブが表示されるのはなぜですか?