OK...now I've completely switched my loading code around to look like the browsers (see attached).
It all compiles and runs, but now I can't get it to load a file at all...I keep getting the following exception at line 137: org.ietf.uri.UnsupportedServiceException: file is not supported at org.ietf.uri.URL.getResource(URL.java:472) at org.web3d.vrml.sav.InputSource.getCharacterStream(InputSource.java:158) at org.web3d.parser.GeneralisedReader.parse(GeneralisedReader.java:139) at org.web3d.vrml.nodes.loader.DefaultWorldLoader.loadNow(DefaultWorldLoader.java:144) at org.web3d.vrml.nodes.loader.DefaultWorldLoader.loadNow(DefaultWorldLoader.java:95) at org.mikemccutcheon.sandbox.java3d.cubeworld.X3DUtil.loadX3D(X3DUtil.java:137) at org.mikemccutcheon.sandbox.java3d.cubeworld.TestWorldBranch.init(TestWorldBranch.java:246 ) at org.mikemccutcheon.sandbox.java3d.cubeworld.Controller.<init>(Controller.java:123) at org.mikemccutcheon.sandbox.java3d.cubeworld.Controller.main(Controller.java:48) Note that when I print out the file, it does exist and the inputsource is also there (not null) What am I doing wrong? (see attached) Mike
package org.mikemccutcheon.sandbox.java3d.cubeworld; import java.io.File; import javax.media.j3d.SceneGraphObject; import javax.media.j3d.Canvas3D; import org.web3d.browser.BrowserCore; import org.web3d.parser.DefaultVRMLParserFactory; import org.web3d.vrml.parser.VRMLParserFactory; import org.web3d.vrml.nodes.FrameStateManager; import org.web3d.vrml.sav.InputSource; import org.web3d.vrml.nodes.VRMLNodeType; import org.web3d.vrml.nodes.loader.SceneBuilder; import org.web3d.vrml.nodes.loader.WorldLoaderManager; import org.web3d.vrml.nodes.loader.WorldLoader; import org.web3d.vrml.nodes.loader.DefaultWorldLoaderManager; import org.web3d.vrml.nodes.loader.ScriptLoader; import org.web3d.vrml.nodes.loader.DefaultScriptLoader; import org.web3d.vrml.nodes.loader.ExternalLoadManager; import org.web3d.vrml.nodes.loader.MemCacheLoadManager; import org.web3d.vrml.nodes.VRMLScene; import org.web3d.vrml.nodes.runtime.GeneralisedFrameStateManager; import org.web3d.vrml.nodes.runtime.EventModelEvaluator; import org.web3d.vrml.nodes.runtime.GeneralisedEventModelEvaluator; import org.web3d.vrml.nodes.runtime.ScriptManager; import org.web3d.vrml.nodes.runtime.DefaultScriptManager; import org.web3d.vrml.nodes.runtime.RouteManager; import org.web3d.vrml.nodes.runtime.DefaultRouteManager; import org.web3d.vrml.nodes.runtime.ListsRouterFactory; import org.web3d.vrml.nodes.runtime.AWTListenerEventBuffer; import org.web3d.vrml.renderer.j3d.J3DSceneBuilderFactory; import org.web3d.vrml.renderer.j3d.input.J3DSensorManager; import org.web3d.vrml.renderer.j3d.input.DefaultSensorManager; import org.web3d.vrml.renderer.j3d.browser.OverlayHandler; import org.web3d.vrml.renderer.j3d.browser.VRMLUniverse; import org.web3d.vrml.renderer.j3d.nodes.J3DWorldRootNodeType; import org.web3d.net.protocol.JavascriptResourceFactory; import org.web3d.net.resolve.Web3DURNResolver; import org.web3d.net.content.VRMLContentHandlerFactory; import org.web3d.net.content.VRMLFileNameMap; import org.ietf.uri.URI; import org.ietf.uri.URN; import org.ietf.uri.URIResourceStreamFactory; import org.ietf.uri.ContentHandlerFactory; import org.ietf.uri.FileNameMap; public class X3DUtil { public SceneGraphObject loadX3D(String inFileName, Canvas3D inCanvas3D) { // --------------------- // SETUP SCRIPT MANAGER // --------------------- ScriptLoader script_loader = new DefaultScriptLoader(); ScriptManager script_manager = new DefaultScriptManager(); script_manager.setScriptLoader(script_loader); System.out.println("ScriptLoader: "+script_loader); System.out.println("ScriptManager: "+script_manager); // -------------------- // SETUP ROUTE MANAGER // -------------------- RouteManager route_manager = new DefaultRouteManager(); ListsRouterFactory listsRouterFactory = new ListsRouterFactory(); route_manager.setRouterFactory(listsRouterFactory); System.out.println("RouteManager: "+route_manager); System.out.println("ListsRouterFactory: "+listsRouterFactory); // ------------------------- // SETUP THE SENSOR MANAGER // ------------------------- AWTListenerEventBuffer i_buf = new AWTListenerEventBuffer(); J3DSensorManager sensor_manager = new DefaultSensorManager(); sensor_manager.setInputBuffer(i_buf); System.out.println("AWTListenerEventBuffer: "+i_buf); System.out.println("J3DSensorManager: "+sensor_manager); // ------------------------ // SETUP THE STATE MANAGER // ------------------------ FrameStateManager state_manager = new GeneralisedFrameStateManager(); System.out.println("FrameStateManager: "+state_manager); // ------------------- // SETUP LOAD MANAGER // ------------------- ExternalLoadManager load_manager = new MemCacheLoadManager(); System.out.println("ExternalLoadManager: "+load_manager); // ---------------------------- // SETUP EVENT MODEL EVAULATOR // ---------------------------- EventModelEvaluator event_model = new GeneralisedEventModelEvaluator(); event_model.initialize(script_manager, route_manager,sensor_manager, state_manager, load_manager); System.out.println("EventModelEvaluator: "+event_model); // ----------------------------------- // SETUP PARSER AND BUILDER FACTORIES // ----------------------------------- J3DSceneBuilderFactory sbf = new J3DSceneBuilderFactory(false, true,true, true, true, true, true); VRMLParserFactory vpf = new DefaultVRMLParserFactory(); System.out.println("J3DSceneBuilderFactory: "+sbf); System.out.println("VRMLParserFactory: "+vpf); // ------------------- // SETUP WORLD LOADER // ------------------- WorldLoaderManager worldLoaderManager = new DefaultWorldLoaderManager(state_manager); worldLoaderManager.registerBuilderFactory(BrowserCore.JAVA3D_RENDERER, sbf); worldLoaderManager.registerParserFactory(BrowserCore.JAVA3D_RENDERER, vpf); System.out.println("WorldLoaderManager: "+worldLoaderManager); // ---------------------- // SETUP OVERLAY HANDLER // ---------------------- OverlayHandler overlayHandler = new DefaultOverlayHandler(inCanvas3D); // ------------------------------------- // SETUP VRML UNIVERSE AND WORLD LOADER // ------------------------------------- VRMLUniverse universe = new VRMLUniverse(event_model,overlayHandler); WorldLoader loader = worldLoaderManager.fetchLoader(); // ---------------- // LOAD PROPERTIES // ---------------- setupProperties(universe, worldLoaderManager); // -------------------- // LOAD/PARSE X3D FILE // -------------------- File file = new File(inFileName); System.out.println("file.exists(): "+file.exists()); InputSource is = new InputSource(file); System.out.println("is: "+is); VRMLScene parsed_scene = null; try { parsed_scene = loader.loadNow(universe, is); } catch(Exception e) { e.printStackTrace(); } // -------------------------------------- // EXTRACT AND RETURN SCENE GRAPH OBJECT // -------------------------------------- SceneGraphObject sceneObject = null; if(parsed_scene!=null) { VRMLNodeType baseRootNode = parsed_scene.getRootNode(); J3DWorldRootNodeType rootNode = (J3DWorldRootNodeType)baseRootNode; sceneObject = rootNode.getSceneGraphObject(); } return sceneObject; } private class DefaultOverlayHandler implements OverlayHandler { Canvas3D canvas3D; public DefaultOverlayHandler(Canvas3D inCanvas3D) { canvas3D = inCanvas3D; } public Canvas3D getPrimaryCanvas() { return canvas3D; } } private void setupProperties(BrowserCore core, WorldLoaderManager loader) { System.setProperty("sun.awt.font.advancecache", "off"); System.setProperty("uri.content.handler.pkgs", "vlc.net.content"); System.setProperty("uri.protocol.handler.pkgs", "vlc.net.protocol"); System.setProperty("java.content.handler.pkgs", "vlc.content"); URIResourceStreamFactory res_fac = URI.getURIResourceStreamFactory(); if(!(res_fac instanceof JavascriptResourceFactory)) { res_fac = new JavascriptResourceFactory(res_fac); URI.setURIResourceStreamFactory(res_fac); } ContentHandlerFactory c_fac = URI.getContentHandlerFactory(); if(!(c_fac instanceof VRMLContentHandlerFactory)) { c_fac = new VRMLContentHandlerFactory(core, loader, c_fac); URI.setContentHandlerFactory(c_fac); } FileNameMap fn_map = URI.getFileNameMap(); if(!(fn_map instanceof VRMLFileNameMap)) { fn_map = new VRMLFileNameMap(fn_map); URI.setFileNameMap(fn_map); } Web3DURNResolver resolver = new Web3DURNResolver(); URN.addResolver(resolver); } } /* import java.io.File; import java.io.FileReader; import java.io.FileNotFoundException; import javax.media.j3d.SceneGraphObject; import org.web3d.j3d.loaders.Web3DLoader; import org.web3d.vrml.nodes.VRMLScene; import org.web3d.vrml.nodes.VRMLNodeType; import org.web3d.vrml.renderer.j3d.nodes.J3DWorldRootNodeType; public class X3DUtil { public SceneGraphObject loadX3D(String inFileName) { File file = new File(inFileName); FileReader reader = null; try { reader = new FileReader(file); } catch(FileNotFoundException fnfe) { fnfe.printStackTrace(); System.exit(1); } Web3DLoader loader = new Web3DLoader(); loader.load(reader); VRMLScene scene = loader.getVRMLScene(); VRMLNodeType baseRootNode = scene.getRootNode(); J3DWorldRootNodeType rootNode = (J3DWorldRootNodeType)baseRootNode; SceneGraphObject sceneObject = rootNode.getSceneGraphObject(); return sceneObject; } } */ /* // good code... //canvas.addMouseListener(i_buf); //canvas.addMouseMotionListener(i_buf); //canvas.addKeyListener(i_buf); //canvas.addKeyListener(this); // code does not work //import org.web3d.j3d.loaders.Web3DLoader; //import org.web3d.vrml.nodes.VRMLScene; //import org.web3d.vrml.nodes.VRMLNodeType; //import org.web3d.vrml.renderer.j3d.nodes.J3DWorldRootNodeType; Web3DLoader loader = new Web3DLoader(); System.out.println("file: "+file); System.out.println("reader: "+reader); loader.load(reader); VRMLScene scene = loader.getVRMLScene(); VRMLNodeType baseRootNode = scene.getRootNode(); J3DWorldRootNodeType rootNode = (J3DWorldRootNodeType)baseRootNode; SceneGraphObject sceneObject = rootNode.getSceneGraphObject(); return sceneObject; */