MacgyverPT Posted November 29, 2009 at 12:04 PM Report Share #297977 Posted November 29, 2009 at 12:04 PM Boas. Tenho aqui um pequeno problema que me anda a dar volta a cabeça. Tenho estas 2 classes: Classe 1: EverythingCounts import acm.graphics.*; import acm.program.*; import acm.gui.*; import acm.util.*; import acm.io.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.applet.*; public class EverythingCounts extends GraphicsProgram { private final static int SIZE = 100; private Target target; public void EverythingCounts() { this.target = new Target(Color.RED, EverythingCounts.SIZE); this.addMouseListeners(); } public void run() { //colocar o jogo a funcionar! (new IODialog()).println("Ready?"); this.playGame(); } private void playGame() { this.add(this.target); this.target.resetCounter(); } } Classe 2: Target: (aqui os import são os mesmos, eu retirei para poupar espaço) public class Target extends GCompound { private int counter; public GOval biggestCircle; public GOval middleCircle; public GOval insideCircle; public Target(Color color, int size) { //put the counter on zero this.counter = 0; //Draw the circles to create the full target this.biggestCircle = new GOval(size, size, size, size); this.biggestCircle.setFilled(true); this.biggestCircle.setFillColor(color.RED); //(desenha mais 2 círculos com os nomes: middleCircle e insideCircle) this.add(this.biggestCircle); } public void resetCounter() { this.counter = 0; } } O meu problema é, quando faço o compilar, ele faz tudo bem sem erros, mas quando executo, da um erro na linha "this.add(this.target);" da primeira classe e diz o seguinte: java.lang.NullPointerException at acm.graphics.GCanvas.add(GCanvas.java) at acm.program.GraphicsProgram.add(GraphicsProgram.java) at EverythingCounts.playGame(EverythingCounts.java:40) at EverythingCounts.run(EverythingCounts.java:34) at acm.program.Program.runHook(Program.java) at acm.program.Program.startRun(Program.java) at acm.program.Program.start(Program.java) at acm.program.Program.start(Program.java) (...) repete o mesmo, mas alterando as vezes o nº da linha (...) O mais estranho, e que eu resolvi um exercício anterior que é praticamente o mesmo (so precisei de alterar o nome da classe) e funcionou... so neste é que nao quer trabalhar... Alguem me dá uma dica pra resolver isto? Cump. MoffspringR Link to comment Share on other sites More sharing options...
pedrotuga Posted November 29, 2009 at 03:31 PM Report Share #297994 Posted November 29, 2009 at 03:31 PM Bem, realmente estás a inicilizar o atributo Target no construtor. Não estás a aceder ao método playgame estaticamente? Caso contrario o problema não me parece estar neste código. Experimenta ver o que se passa no construtor, se tiveres um debugger à mão, coloca lá um breakpoint no inicio do construtor. Se não experimentar colocar uns System.out.println("whatever") no inicio e no fim do construtor. Envia o atributo target para o output para ver o que ele tem. Link to comment Share on other sites More sharing options...
Baderous Posted November 29, 2009 at 03:51 PM Report Share #297997 Posted November 29, 2009 at 03:51 PM Bem, realmente estás a inicilizar o atributo Target no construtor. O problema está aí. Aquilo não é um construtor, é um método. E se o add depender do construtor, é óbvio que target vai ser null porque não foi inicializado. Link to comment Share on other sites More sharing options...
MacgyverPT Posted November 29, 2009 at 07:00 PM Author Report Share #298006 Posted November 29, 2009 at 07:00 PM Boas. Ja andei com o código pra trás e pra frente e não encontro maneira de resolver isto... to ficando saturado! Se no guia que fiz deu, porque é que aqui não dá? Muito estranho... Link to comment Share on other sites More sharing options...
Baderous Posted November 29, 2009 at 07:02 PM Report Share #298007 Posted November 29, 2009 at 07:02 PM Experimenta retirar o 'void' do 'public void EverythingCounts'. Link to comment Share on other sites More sharing options...
MacgyverPT Posted November 29, 2009 at 07:17 PM Author Report Share #298008 Posted November 29, 2009 at 07:17 PM Assim nao da erro, mas nao mostra os circulos :S Link to comment Share on other sites More sharing options...
Baderous Posted November 29, 2009 at 07:35 PM Report Share #298011 Posted November 29, 2009 at 07:35 PM O método add estará a funcionar correctamente? Link to comment Share on other sites More sharing options...
MacgyverPT Posted November 29, 2009 at 07:52 PM Author Report Share #298013 Posted November 29, 2009 at 07:52 PM Agora esta a funcionar. Mas la esta, continuo a nao perceber porque e que no guia que fiz anteriormente funcionava e agora não... O codigo é o mesmo (so altera o nome da classe principal - Em vez de ser MovingTargets passou a ser EverythingCounts) Edit: Done! Obrigado pelas dicas! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now