m3g - dúvida em Mobile 3D Graphics

Salve galera! Estou tentando rodar um exemplo de renderização 3D mas não consigo nem ferrando. O Código é um de exemplo que vem com o wirelesstoolkit e o problema que aparece é que não consigo abrir a URI. ALguém tem alguma sugestão?
Obrigado!

Du

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */

package projetousp;

/****************************************************************************/
/

  •    @file        RetainModeMidlet.java
    
  •    @brief        A simple example of a retained mode M3G midlet
    
  •    Copyright (C) 2004 Superscape plc
    
  •    This file is intended for use as a code example, and
    
  •    may be used, modified, or distributed in source or
    
  •    object code form, without restriction, as long as
    
  •    this copyright notice is preserved.
    
  •    The code and information is provided "as-is" without
    
  •    warranty of any kind, either expressed or implied.
    

*/

/******************************************************************************/
//package com.superscape.m3g.wtksamples.retainedmode;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

import java.lang.IllegalArgumentException;

import java.util.Timer;
import java.util.TimerTask;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.m3g.*;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class RetainedModeMidlet extends MIDlet implements CommandListener {
private Display myDisplay = null;
private JesterCanvas myCanvas = null;
private Timer myRefreshTimer = new Timer();
private TimerTask myRefreshTask = null;
private Command exitCommand = new Command("Exit", Command.ITEM, 1);
Graphics3D myGraphics3D = Graphics3D.getInstance();
World myWorld = null;
private long worldStartTime = 0;
private long lastPauseTime = 0;
private boolean paused = false;
int viewport_x;
int viewport_y;
int viewport_width;
int viewport_height;
int currentContent = 0;

/**
 * RetainedModeMidlet - default constructor.
 */
public RetainedModeMidlet() {
    super();

    // Set up the user interface.
    myDisplay = Display.getDisplay(this);
    myCanvas = new JesterCanvas(this);
    myCanvas.setCommandListener(this);
    myCanvas.addCommand(exitCommand);
}

/**
 * startApp()
 */
public void startApp() throws MIDletStateChangeException {
    myDisplay.setCurrent(myCanvas);

    if (!paused) {
        // executed for the first time
        try {
            myWorld = (World)Loader.load(
                    "swerve.m3g")[0];
            setupAspectRatio();
        } catch (Exception e) {
            System.out.println("nao abriu mapa");
        }
    }

    worldStartTime = System.currentTimeMillis();
    paused = false;
    myCanvas.repaint();
}

/**
 * pauseApp()
 */
public void pauseApp() {
    paused = true;
    lastPauseTime += (System.currentTimeMillis() - worldStartTime);
}

/**
 * destroyApp()
 */
public void destroyApp(boolean unconditional) throws MIDletStateChangeException {
    myRefreshTimer.cancel();
    myRefreshTimer = null;
}

/**
 * Make sure that the content is rendered with the correct aspect ratio.
 */
void setupAspectRatio() {
    viewport_x = 0;
    viewport_y = 0;
    viewport_width = myCanvas.getWidth();
    viewport_height = myCanvas.getHeight();

    Camera cam = myWorld.getActiveCamera();

    float[] params = new float[4];
    int type = cam.getProjection(params);

    if (type != Camera.GENERIC) {
        //calculate window aspect ratio
        float waspect = viewport_width / viewport_height;

        if (waspect < params[1]) {
            float height = viewport_width / params[1];
            viewport_height = (int)height;
            viewport_y = (myCanvas.getHeight() - viewport_height) / 2;
        } else {
            float width = viewport_height * params[1];
            viewport_width = (int)width;
            viewport_x = (myCanvas.getWidth() - viewport_width) / 2;
        }
    }
}

/**
 * MIDlet paint method.
 */
public void paint(Graphics g) {
    if ((myCanvas == null) || (myGraphics3D == null) || (myWorld == null)) {
        return;
    }

    if ((g.getClipWidth() != viewport_width) || (g.getClipHeight() != viewport_height) ||
            (g.getClipX() != viewport_x) || (g.getClipY() != viewport_y)) {
        g.setColor(0x00);
        g.fillRect(0, 0, myCanvas.getWidth(), myCanvas.getHeight());
    }

    // Delete any pending refresh tasks.
    if (myRefreshTask != null) {
        myRefreshTask.cancel();
        myRefreshTask = null;
    }

    if (paused) {
        // don't update the animation if paused
        myGraphics3D.bindTarget(g);
        myGraphics3D.setViewport(viewport_x, viewport_y, viewport_width, viewport_height);
        myGraphics3D.render(myWorld);
        myGraphics3D.releaseTarget();

        return;
    }

    // Update the world to the current time.
    long startTime = System.currentTimeMillis() - worldStartTime + lastPauseTime;

    if ((currentContent == 0) && (startTime > 5000)) {
        currentContent++;

        try {
            myWorld = (World)Loader.load(
                    "skaterboy.m3g")[0];
            setupAspectRatio();
        } catch (Exception e) {
            System.out.println("nao abriu skatista");
        }

        g.setColor(0x00);
        g.fillRect(0, 0, myCanvas.getWidth(), myCanvas.getHeight());
    }

    // update any animations in the world
    int validity = myWorld.animate((int)startTime);

    // render the 3d scene
    myGraphics3D.bindTarget(g);
    myGraphics3D.setViewport(viewport_x, viewport_y, viewport_width, viewport_height);
    myGraphics3D.render(myWorld);
    myGraphics3D.releaseTarget();

    if (validity < 1) { // The validity too small; allow a minimum of 1ms.
        validity = 1;
    }

    if (validity == 0x7fffffff) { // The validity is infinite; schedule a refresh in 1 second.
        myRefreshTask = new RefreshTask();
        myRefreshTimer.schedule(myRefreshTask, 1000);
    } else { // Schedule a refresh task.
        // Create a new refresh task.
        myRefreshTask = new RefreshTask();
        // Schedule an update.
        myRefreshTimer.schedule(myRefreshTask, validity);
    }
}

/**
 * Handle commands.
 */
public void commandAction(Command cmd, Displayable disp) {
    if (cmd == exitCommand) {
        try {
            destroyApp(false);
            notifyDestroyed();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

/**
 * Inner class for refreshing the view.
 */
private class RefreshTask extends TimerTask {
    public void run() {
        // Get the canvas to repaint itself.
        myCanvas.repaint(viewport_x, viewport_y, viewport_width, viewport_height);
    }
}

/**
 * Inner class for handling the canvas.
 */
class JesterCanvas extends Canvas {
    RetainedModeMidlet myTestlet;

    /**
     * Construct a new canvas
     */
    JesterCanvas(RetainedModeMidlet Testlet) {
        myTestlet = Testlet;
    }

    /**
     * Initialize self.
     */
    void init() {
    }

    /**
     * Cleanup and destroy.
     */
    void destroy() {
    }

    /*
     * Ask myTestlet to paint itself
     */
    protected void paint(Graphics g) {
        myTestlet.paint(g);
    }

    /*
     * Ask myTestlet to handle keyPressed events
     */
    protected void keyPressed(int keyCode) {
    }

    /*
     * Ask myTestlet to handle keyReleased events
     */
    protected void keyReleased(int keyCode) {
    }

    /*
     * Ask myTestlet to handle keyRepeated events
     */
    protected void keyRepeated(int keyCode) {
    }

    /*
     * Ask myTestlet to handle pointerDragged events
     */
    protected void pointerDragged(int x, int y) {
    }

    /*
     * Ask myTestlet to handle pointerPressed events
     */
    protected void pointerPressed(int x, int y) {
    }

    /*
     * Ask myTestlet to handle pointerReleased events
     */
    protected void pointerReleased(int x, int y) {
    }
}

}
[/code]

Sempre poste a StackTrace que está acontecendo.

Eu consegui resolver colocando o pacote na frente do nome do arquivo :). Valeu ^^