Problema ao instanciar uma Classe

9 respostas
R

tenho um Midlet onde estou tentando instanciar uma classe que eu mesmo criei, a classe possui muitos atributos byte e 4 Strings, e varias operações, na maioria de soma e subtração

quando tento rodar aparece o seguinte erro no netBeans:

Error verifying method Character ([B)V
Approximate bytecode offset 28: Inconsistent or missing stackmap at target

se quiserem que eu poste a classe eu posto, só que ela é meio grande!

9 Respostas

R

vou ser mais especifico, agora que fucei melhor: existe alguns metodos que ao serem comentados consigo instanciar minha classe, um dos metodos que não deixam eu instanciar minha classe é:

private void upHP() { if (level == 1) { hp = Classes.LIFE_DICE[classification]; } else { hp = (byte) (hp + Classes.LIFE_DICE[classification] ); } }

onde level, hp e classification são atributos privados da classe, todos do tipo byte
Classes é uma classe final com algumas constantes

se eu comento esse metodo a classe é instanciada na boa

cv1

Voce esta fazendo pre-verificacao nas classes antes de rodar?

R

parece que tenho muito o que aprender!
como faço pré-verificação?

D

Se vc está usando o WTK (Wireless Toolkit) basta vc clicar em “Build” que ele faz tudo pra vc.

Se vc está usando o javac mesmo, depois de compilar sua classe use o comando preverify que deverá ter alguns atributos que dependerá de como seu ambiente está configurado (Classpath, etc).

Vá na seção de artigos aqui do GUJ e dê uma olhada no artigo para iniciantes em J2ME. Se mesmo assim sua dúvida não for sanada, volte aki!

Um abraço!

R

ops, então, eu não estava usando o WTK, dai comecei a usar e descobri que não havia erros (pelo menos em alguns metodos) agora os metodos que estão dando erros são esses:

public Character(byte[] arg) {
		ByteArrayInputStream bStrm = new ByteArrayInputStream(arg);
		StringBuffer sbAux = new StringBuffer();
		byte bAux;

		
			bAux = (byte) bStrm.read();
			while (bAux != ';') {
				sbAux.append(bAux);
				bAux = (byte) bStrm.read();
			}
			name = sbAux.toString();
			sbAux.delete(0,sbAux.length()-1);

			bAux = (byte) bStrm.read();
			while (bAux != ';') {
				sbAux.append(bAux);
				bAux = (byte) bStrm.read();
			}
			player = sbAux.toString();
			sbAux.delete(0,sbAux.length()-1);

			bAux = (byte) bStrm.read();
			while (bAux != ';') {
				sbAux.append(bAux);
				bAux = (byte) bStrm.read();
			}
			eyes = sbAux.toString();
			sbAux.delete(0,sbAux.length()-1);

			bAux = (byte) bStrm.read();
			while (bAux != ';') {
				sbAux.append(bAux);
				bAux = (byte) bStrm.read();
			}
			hair = sbAux.toString();
			sbAux.delete(0,sbAux.length()-1);

			classification = (byte) bStrm.read();
			race = (byte) bStrm.read();
			alignment = (byte) bStrm.read();
			level = (byte) bStrm.read();
			size = (byte) bStrm.read();
			gender = (byte) bStrm.read();

			str = (byte) bStrm.read();
			dex = (byte) bStrm.read();
			con = (byte) bStrm.read();
			intelligence = (byte) bStrm.read();
			wis = (byte) bStrm.read();
			cha = (byte) bStrm.read();

			hp = (byte) bStrm.read();
			ac = (byte) bStrm.read();
			armorBonus = (byte) bStrm.read();
			miscAC = (byte) bStrm.read();

			miscInitiative = (byte) bStrm.read();

			xp = (byte) bStrm.read();


	}

e este

public byte[] getCharacter() {
		byte[] returns = null;

		ByteArrayOutputStream bStrm = new ByteArrayOutputStream();

		try {
			bStrm.write(name.getBytes());
			bStrm.write(';');
			bStrm.write(player.getBytes());
			bStrm.write(';');
			bStrm.write(eyes.getBytes());
			bStrm.write(';');
			bStrm.write(hair.getBytes());
			bStrm.write(';');

			bStrm.write(classification);
			bStrm.write(race);
			bStrm.write(alignment);
			bStrm.write(level);
			bStrm.write(size);
			bStrm.write(gender);

			bStrm.write(str);
			bStrm.write(dex);
			bStrm.write(con);
			bStrm.write(intelligence);
			bStrm.write(wis);
			bStrm.write(cha);

			bStrm.write(hp);
			bStrm.write(ac);
			bStrm.write(armorBonus);
			bStrm.write(miscAC);

			bStrm.write(miscInitiative);

			bStrm.write(xp);

		} catch (IOException e) {

			e.printStackTrace();
		}

		returns = bStrm.toByteArray();

		return returns;
	}

só pra ser mais especifico, essa classe representa um personagem de jogo de RPG (estou fazendo um programa pra celular que calcula a ficha sozinho) então fiz esses metodos, um exporta um array de bytes pra poder salvar num recordstore e o outro constroi a partir de um array de bytes.

não sei se o metodo é o correto, usei apenas a teoria que li e minha logica

cv1

Mas, afinal, vc esta fazendo a pre-verificacao? :smiley:

R

agora estou sim, não estava usando o WTK

mas agora usando o WTK sim, e ele faz pré verificação!

só gostaria de saber se esses dois metodos estão feitos corretamente, se existe alguma coisa que não funciona em midlet!

cv1

O erro esta na compilacao ou na execucao? Alias, qual o erro que esses dois metodos apresentam? O mesmo da primeira msg?

R
Project "RPG" loaded

Project settings saved

Building "RPG"

Build complete

Running with storage root DefaultColorPhone

Unable to create MIDlet PrimeiroMidlet

java.lang.NullPointerException

	at Character.getCharacter(+32)

	at PrimeiroMidlet.<init>(+67)

	at java.lang.Class.runCustomCode(+0)

	at com.sun.midp.midlet.MIDletState.createMIDlet(+19)

	at com.sun.midp.midlet.Selector.run(+22)

Unable to create MIDlet PrimeiroMidlet

java.lang.NullPointerException

	at Character.getCharacter(+32)

	at PrimeiroMidlet.<init>(+67)

	at java.lang.Class.runCustomCode(+0)

	at com.sun.midp.midlet.MIDletState.createMIDlet(+19)

	at com.sun.midp.midlet.Selector.run(+22)

dei uma fuçada melhor

agora é quando aciono o metodo getCharacter que ele da um nullPointerException

Criado 6 de maio de 2004
Ultima resposta 7 de mai. de 2004
Respostas 9
Participantes 3