Ajuda com Canvas no NetBeans

Pessoal, tôp usando o Netbeans 6.9

tô fazendo uma midlet e ela usa um CAnvas que eu construí. Coloquei as duas classes num pacote e rodei. A classe principal (que instancia e coloca o Canvas no display) funciona legal, tudo roda. Só que quando eu dou o start no emulador, na lisa de midlets disponiveis no projeto, o Canvas também aparece.

tipo… tenho minha midlet e o canvas. Inicio o emulador e´na lista de midlets que eu posso rodar lá estão as duas. Eu nao posso rodar um canvas, correto? porque não é um midlet. Entao uso uma midlet pra instanciar o canvas e colocar no display. O problema é que obviamente eu nao quero que o canvas apareça na lista de midlets que o usuario pode abrir. Mas ele aparece. Usei o Eclipse e vi que no .jad eu posso dizer qual é o midlet que o projeto deve realmente lançar, assim eu edito o arquivo e aquela é a midlet que aparece na lista. Tentei fazer isso no NetBeans, mas antes de lançar o emulador ele sempre atualiza o arquivo a adiciona o Canvas novamente… Como posso resolver o problema?

Estou enviando abaixo a classe midlet mais o jad, como voces podem ver, existem varias midlets no projeto e o Canvas é listado como o 5. Eu apaguei do arquivo (no netbeans o .jad nem aparece, abri o arquivo na mao e ditei), ai ele sempre coloca novamente antes de lançar o emulador…

Desde já, obrigado!

public class MinhaMidlet extends MIDlet {

Display display;
StarField stars; // esse aqui estende o GameCanvas, então é um canvas

public void startApp() {
    stars = new StarField();
    display.getDisplay(this).setCurrent(stars);
}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {
}

}

MIDlet-1: HelloMIDlet, , hello.HelloMIDlet
MIDlet-2: Testes, , hello.Testes
MIDlet-3: RmsMidlet, ,segundoPack.RmsMidlet
MIDlet-4: ExemploGauge, ,gauges.ExemploGauge
MIDlet-5: StarField, , desenho.StarField
MIDlet-6: MinhaMidlet, , desenho.MinhaMidlet
MIDlet-Jar-Size: 11800
MIDlet-Jar-URL: testesME.jar
MIDlet-Name: testesME
MIDlet-Vendor: Vendor
MIDlet-Version: 1.0
MicroEdition-Configuration: CLDC-1.1
MicroEdition-Profile: MIDP-2.1

Por favor, coloque seu código entre as tags.

Vamos lá, tem como postar o código da sua classe Canvas? (entre as tags, claro :lol: )

gpmdf2,

Por que o seu Canvas está aparecendo na lista de MIDlets só dá para ver depois que você postar o código.

Entretando, podemos dizer no NetBeans quais midlets podem ser acionadas pelo usuário no menu:

  • Segundo botão em cima do nome do seu projeto;
  • Propriedades;
  • Descritor de aplicativos (no lado esquerdo da tela);
  • Aba MIDlets.

Nessa aba você pode dizer quais classes MIDlets poderão ser utilizadas pelo usuário.
Na verdade essa configuração edita o .jad do projeto.

Obs.: Os menus que listei foram tirados do NetBeans 6.5.1, acredito que no 6.9 seja parecido.

Espero ter ajudado!

Pessoal , valeu pela ajuda. o codigo do canvas (na verdade um gamecanvas) eu nao tenho aqui agora, pois estou no trabalho e o codigo ta em casa. mas eu tava olhando de um tutorial, que o codigo segue abaixo (o de la de casa nao deve ter muita diferenca…)
mas a noite ou amanha de manha eu mostro o que eu tenho em casa.

vou tentar tambem dar uma olhada no que eu posso fazer agora, com essa solucao ai do menu do netbeans deve dar resultado. pelo que eu lembro, o unico metodo que eu mudei alguma coisinha foi o construtor (eu passei a midlet que gera o canvas) e o run, onde eu mudei um pouquinho so pra saber o que tava acontecendo, tipo mudar a cor, mudar uma coisinha do loop, nada de mais…

aproveitando o assunto esse canvas faz com que a imagem desça. onde é que ea az isso?? é no graphics.copyArea( 0, 0, w, h, 0, 1,Graphics.TOP | Graphics.LEFT ); ?? Eu imaginava que tinha que fazer no loop uma variavel pra guardar a informacao de onde a tela parou (tipo uma coordenada), depois incrementa. aí, quando o loop voltasse, ele pintava na nova coordenada (que foi incrementada).

eu uso o codigo, so que eu nao entendo direito. como e que ele sabe que o troço mudou de lugar e continua de la sem incrementar a posicao anterior? me desculpem a ignorancia, mas e que to curioso… rsrsrs. como eu disse, eu mudei o codigo e mudei tb essa linha. eu sei que quando eu mudo o Graphics.TOP | Graphics.LEFT, ele nao desce mais. entao e ai mesmo, alem disso, ele desce porque ele copia a tela, ne? entao tem que ser isso mesmo. so fiquei curioso p saber como e que ele faz sem incrementar uma posicao…

tipo pintar em “x” incrementa e depois pinta tudo em “x++”, isso seria pintar mais pra frente… sacou? bem… obg pela ajuda. vou tentar o q me falarem e entro em contato

import java.util.Random;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.GameCanvas;

// A simple example of a game canvas that displays
// a scrolling star field. The UP and DOWN keys
// speed up or slow down the rate of scrolling.

public class StarField extends GameCanvas
implements Runnable {

private static final int SLEEP_INCREMENT = 10;
private static final int SLEEP_INITIAL = 150;
private static final int SLEEP_MAX = 300;

private Graphics        graphics;
private Random          random;
private int             sleepTime = SLEEP_INITIAL;
private volatile Thread thread;

public StarField(){
	super( true );

	graphics = getGraphics();
	graphics.setColor( 0,  0, 0 );
	graphics.fillRect( 0, 0, getWidth(), getHeight() );
}

// When the game canvas is hidden, stop the thread.

protected void hideNotify(){
	thread = null;
}

// The game loop.

public void run(){
	int w = getWidth();
	int h = getHeight() - 1;

	while( thread == Thread.currentThread() ){

		// Increment or decrement the scrolling interval
		// based on key presses

		int state = getKeyStates();

		if( ( state & DOWN_PRESSED ) != 0 ){
			sleepTime += SLEEP_INCREMENT;
			if( sleepTime > SLEEP_MAX ) 
				sleepTime = SLEEP_MAX;
		} else if( ( state & UP_PRESSED ) != 0 ){
			sleepTime -= SLEEP_INCREMENT;
			if( sleepTime < 0 ) sleepTime = 0;
		}

		// Repaint the screen by first scrolling the
		// existing starfield down one and painting in
		// new stars...

		graphics.copyArea( 0, 0, w, h, 0, 1,
		Graphics.TOP | Graphics.LEFT );

		graphics.setColor( 0, 0, 0 );
		graphics.drawLine( 0, 0, w, 1 );
		graphics.setColor( 255, 255, 255 );

		for( int i = 0; i < w; ++i ){
			int test = Math.abs( random.nextInt() ) % 100;
			if( test < 4 ){
				graphics.drawLine( i, 0, i, 0 );
			}
		}

		flushGraphics();

		// Now wait...

		try {
			Thread.currentThread().sleep( sleepTime );
		}
		catch( InterruptedException e ){
		}
	}
}

// When the canvas is shown, start a thread to
// run the game loop.

protected void showNotify(){
	random = new Random();

	thread = new Thread( this );
	thread.start();
}

}

Esse exemplo ai de cima ta em http://developers.sun.com/mobility/midp/ttips/gamecanvas/index.html

pelo menos ta identado, fica mais legal de ler

[quote=gpmdf2]Pessoal , valeu pela ajuda. o codigo do canvas (na verdade um gamecanvas) eu nao tenho aqui agora, pois estou no trabalho e o codigo ta em casa. mas eu tava olhando de um tutorial, que o codigo segue abaixo (o de la de casa nao deve ter muita diferenca…)
mas a noite ou amanha de manha eu mostro o que eu tenho em casa.

vou tentar tambem dar uma olhada no que eu posso fazer agora, com essa solucao ai do menu do netbeans deve dar resultado. pelo que eu lembro, o unico metodo que eu mudei alguma coisinha foi o construtor (eu passei a midlet que gera o canvas) e o run, onde eu mudei um pouquinho so pra saber o que tava acontecendo, tipo mudar a cor, mudar uma coisinha do loop, nada de mais…

aproveitando o assunto esse canvas faz com que a imagem desça. onde é que ea az isso?? é no graphics.copyArea( 0, 0, w, h, 0, 1,Graphics.TOP | Graphics.LEFT ); ?? Eu imaginava que tinha que fazer no loop uma variavel pra guardar a informacao de onde a tela parou (tipo uma coordenada), depois incrementa. aí, quando o loop voltasse, ele pintava na nova coordenada (que foi incrementada).

eu uso o codigo, so que eu nao entendo direito. como e que ele sabe que o troço mudou de lugar e continua de la sem incrementar a posicao anterior? me desculpem a ignorancia, mas e que to curioso… rsrsrs. como eu disse, eu mudei o codigo e mudei tb essa linha. eu sei que quando eu mudo o Graphics.TOP | Graphics.LEFT, ele nao desce mais. entao e ai mesmo, alem disso, ele desce porque ele copia a tela, ne? entao tem que ser isso mesmo. so fiquei curioso p saber como e que ele faz sem incrementar uma posicao…

tipo pintar em “x” incrementa e depois pinta tudo em “x++”, isso seria pintar mais pra frente… sacou? bem… obg pela ajuda. vou tentar o q me falarem e entro em contato

import java.util.Random;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.GameCanvas;

// A simple example of a game canvas that displays
// a scrolling star field. The UP and DOWN keys
// speed up or slow down the rate of scrolling.

public class StarField extends GameCanvas
implements Runnable {

private static final int SLEEP_INCREMENT = 10;
private static final int SLEEP_INITIAL = 150;
private static final int SLEEP_MAX = 300;

private Graphics        graphics;
private Random          random;
private int             sleepTime = SLEEP_INITIAL;
private volatile Thread thread;

public StarField(){
	super( true );

	graphics = getGraphics();
	graphics.setColor( 0,  0, 0 );
	graphics.fillRect( 0, 0, getWidth(), getHeight() );
}

// When the game canvas is hidden, stop the thread.

protected void hideNotify(){
	thread = null;
}

// The game loop.

public void run(){
	int w = getWidth();
	int h = getHeight() - 1;

	while( thread == Thread.currentThread() ){

		// Increment or decrement the scrolling interval
		// based on key presses

		int state = getKeyStates();

		if( ( state & DOWN_PRESSED ) != 0 ){
			sleepTime += SLEEP_INCREMENT;
			if( sleepTime > SLEEP_MAX ) 
				sleepTime = SLEEP_MAX;
		} else if( ( state & UP_PRESSED ) != 0 ){
			sleepTime -= SLEEP_INCREMENT;
			if( sleepTime < 0 ) sleepTime = 0;
		}

		// Repaint the screen by first scrolling the
		// existing starfield down one and painting in
		// new stars...

		graphics.copyArea( 0, 0, w, h, 0, 1,
		Graphics.TOP | Graphics.LEFT );

		graphics.setColor( 0, 0, 0 );
		graphics.drawLine( 0, 0, w, 1 );
		graphics.setColor( 255, 255, 255 );

		for( int i = 0; i < w; ++i ){
			int test = Math.abs( random.nextInt() ) % 100;
			if( test < 4 ){
				graphics.drawLine( i, 0, i, 0 );
			}
		}

		flushGraphics();

		// Now wait...

		try {
			Thread.currentThread().sleep( sleepTime );
		}
		catch( InterruptedException e ){
		}
	}
}

// When the canvas is shown, start a thread to
// run the game loop.

protected void showNotify(){
	random = new Random();

	thread = new Thread( this );
	thread.start();
}

}
[/quote]

Vou te implorar, use as tags code, POR FAVOR?
Nem li seu último post, fica chato de ler, vai por mim, ngm gosta de responder tópico assim.

calma, calma… nao priemos canico!

Foi mal, eu nao prestei atencao…

import java.util.Random;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.GameCanvas;

// A simple example of a game canvas that displays
// a scrolling star field. The UP and DOWN keys
// speed up or slow down the rate of scrolling.

public class StarField extends GameCanvas
	implements Runnable {

	private static final int SLEEP_INCREMENT = 10;
	private static final int SLEEP_INITIAL = 150;
	private static final int SLEEP_MAX = 300;

	private Graphics        graphics;
	private Random          random;
	private int             sleepTime = SLEEP_INITIAL;
	private volatile Thread thread;

	public StarField(){
		super( true );

		graphics = getGraphics();
		graphics.setColor( 0,  0, 0 );
		graphics.fillRect( 0, 0, getWidth(), getHeight() );
	}

	// When the game canvas is hidden, stop the thread.

	protected void hideNotify(){
		thread = null;
	}

	// The game loop.

	public void run(){
		int w = getWidth();
		int h = getHeight() - 1;

		while( thread == Thread.currentThread() ){

			// Increment or decrement the scrolling interval
			// based on key presses

			int state = getKeyStates();

			if( ( state & DOWN_PRESSED ) != 0 ){
				sleepTime += SLEEP_INCREMENT;
				if( sleepTime > SLEEP_MAX ) 
					sleepTime = SLEEP_MAX;
			} else if( ( state & UP_PRESSED ) != 0 ){
				sleepTime -= SLEEP_INCREMENT;
				if( sleepTime < 0 ) sleepTime = 0;
			}

			// Repaint the screen by first scrolling the
			// existing starfield down one and painting in
			// new stars...

			graphics.copyArea( 0, 0, w, h, 0, 1,
			Graphics.TOP | Graphics.LEFT );

			graphics.setColor( 0, 0, 0 );
			graphics.drawLine( 0, 0, w, 1 );
			graphics.setColor( 255, 255, 255 );

			for( int i = 0; i < w; ++i ){
				int test = Math.abs( random.nextInt() ) % 100;
				if( test < 4 ){
					graphics.drawLine( i, 0, i, 0 );
				}
			}

			flushGraphics();

			// Now wait...

			try {
				Thread.currentThread().sleep( sleepTime );
			}
			catch( InterruptedException e ){
			}
		}
	}

	// When the canvas is shown, start a thread to
	// run the game loop.

	protected void showNotify(){
		random = new Random();

		thread = new Thread( this );
		thread.start();
	}
}

resolvido!

resolvido!