I extended JPanel to add a Java3D panel to a SWING frame, then to do some optimizations I changed it to extending Canvas3D, and somehow that broke my texture binding!
Here’s the code:
51        QuadArray map = new QuadArray (4,QuadArray.COORDINATES | GeometryArray.TEXTURE_COORDINATE_2);
52        map.setCoordinate(0, new Point3f(-(width/2f), -(height/2f), -6.0f));
53        map.setCoordinate(1, new Point3f( (width/2f), -(height/2f), -6.0f));
54        map.setCoordinate(2, new Point3f( (width/2f),  (height/2f), -6.0f));
55        map.setCoordinate(3, new Point3f(-(width/2f),  (height/2f), -6.0f));
56
57        map.setTextureCoordinate(GeometryArray.TEXTURE_COORDINATE_2, 0, new TexCoord2f(0.0f,0.0f));
58        map.setTextureCoordinate(GeometryArray.TEXTURE_COORDINATE_2, 1, new TexCoord2f(1.0f,0.0f)); 
59        map.setTextureCoordinate(GeometryArray.TEXTURE_COORDINATE_2, 2, new TexCoord2f(1.0f,1.0f));
60        map.setTextureCoordinate(GeometryArray.TEXTURE_COORDINATE_2, 3, new TexCoord2f(0.0f,1.0f));
…and here is the StackTrace:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 64 	at javax.media.j3d.GeometryArrayRetained.setTextureCoordinates(GeometryArrayRetained.java:4798) 	at javax.media.j3d.GeometryArray.setTextureCoordinate(GeometryArray.java:2034) 	at Map.createSceneGraph(Map.java:57) 	at Map.init(Map.java:107) 	at Map.<init>(Map.java:41) 	at Main.BuildGUI(Main.java:115) 	at Main.<init>(Main.java:56) 	at Main.main(Main.java:34)