• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

M.offspring.R

[Resolvido][Duvida] BlueJ e 2 classes

8 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora