Hi !
I'm using jdk 1.3.0beta_refresh on linux, blackdown java3d 1.2.
In my application I'm trying to change the view. But after doing so, the
following exception occurs :
# # An unexpected exception has been detected in native code outside the
VM.# Program counter=0x48d0f31f
#
# Problematic Thread: prio=1 tid=0x8226070 nid=0xdb5 runnable
#
(it IS formatted this way).
This in none of my threads, so I guess it's the rendering thread running
into problems.
I have attached a little sample program, that reproduces this bug (on my
machine). Can anybody please test this code and
tell me if this is platform/blackdown specific ?
Is anything wrong with my code ? Perhaps this is just some missing check
for developer sanity in java3d ? ;)
thanks,
Niklas
import java.awt.Dimension;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.GraphicsConfigTemplate3D;
import javax.media.j3d.Group;
import javax.media.j3d.Locale;
import javax.media.j3d.PhysicalBody;
import javax.media.j3d.PhysicalEnvironment;
import javax.media.j3d.View;
import javax.media.j3d.ViewPlatform;
import javax.media.j3d.VirtualUniverse;
import javax.swing.JWindow;
public class Test {
public void run() {
GraphicsConfigTemplate3D tmpl = new GraphicsConfigTemplate3D();
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice device = env.getDefaultScreenDevice();
GraphicsConfiguration config = device.getBestConfiguration(tmpl);
Canvas3D canvas3d = new Canvas3D(config);
VirtualUniverse vr = new VirtualUniverse();
BranchGroup world_object_group = new BranchGroup();
world_object_group.setCapability(Group.ALLOW_CHILDREN_READ);
world_object_group.setCapability(Group.ALLOW_CHILDREN_WRITE);
world_object_group.setCapability(Group.ALLOW_CHILDREN_EXTEND);
Locale locale = new Locale(vr);
locale.addBranchGraph(world_object_group);
MyWorld world1 = new MyWorld();
MyWorld world2 = new MyWorld();
JWindow window = new JWindow();
window.getContentPane().add(canvas3d);
window.pack();
window.validate();
window.setSize(new Dimension(400, 400));
window.show();
View view1 = world1.getView();
BranchGroup worldGroup1 = world1.getWorldObjects();
world_object_group.addChild(worldGroup1);
view1.addCanvas3D(canvas3d);
System.out.println("Added first world");
synchronized(this) {
try {wait(10000);} catch (Exception e) {e.printStackTrace();}
}
View view2 = world1.getView();
BranchGroup worldGroup2 = world1.getWorldObjects();
view1.removeCanvas3D(canvas3d);
world_object_group.removeChild(0);
world_object_group.addChild(worldGroup2);
view2.addCanvas3D(canvas3d);
System.out.println("Added second world");
}
public static void main(String[] args) {
new Test().run();
}
private class MyWorld {
View view;
BranchGroup worldobjects;
public MyWorld() {
view = new View();
ViewPlatform platform = new ViewPlatform();
PhysicalBody body = new PhysicalBody();
PhysicalEnvironment env = new PhysicalEnvironment();
view.attachViewPlatform(platform);
view.setPhysicalBody(body);
view.setPhysicalEnvironment(env);
worldobjects = new BranchGroup();
worldobjects.setCapability(BranchGroup.ALLOW_DETACH);
worldobjects.addChild(platform);
}
public View getView() {
return view;
}
public BranchGroup getWorldObjects() {
return worldobjects;
}
}
}